triodancer_4.4.5.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «triodancer_4.4.5.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Triodancer 4.4.5 — торговый советник для MetaTrader 4, работающий по трём независимым логическим блокам, названным Jaipong, Keroncong и Tortor. Каждый блок имеет собственный магический номер, ограничение на число одновременно открытых ордеров и отдельные настройки сопровождения позиций. Советник обрабатывает тиковые события, анализирует данные текущего символа и управляет ордерами через торговые функции MetaTrader 4. В тестовом режиме допускается не более одной обработки в минуту, а при работе на реальном счёте выполняется дополнительная проверка условий по времени и новостям.
Для каждого блока предусмотрены сеточные доливки: объём и шаг между уровнями рассчитываются по заданным пользователем коэффициентам и базовым уровням. Предусмотрены отдельные параметры трейлинг-стопа для каждого блока, а также общий ограничитель максимального объёма позиции. Дополнительно реализованы функции закрытия всех ордеров блока, расчёта средней цены и выставления общего тейк-профита по совокупной позиции.
Советник учитывает торговое расписание: может запрещать открытие новых позиций в конце недели и в начале недели, а также при наличии новостного индикатора urdala_news_investing.com. При включённой опции автоматического подбора параметров сетки значения шага и тейк-профита пересчитываются по среднему дневному диапазону за последние дни; если данных недостаточно, работа советника на графике прекращается.
Все входные параметры задаются пользователем; значения по умолчанию и группы настроек приведены в исходном коде. Советник не является индикатором или библиотекой и предназначен для автоматической торговли на одном символе.
Настройки программы
| Настройка | Описание |
|---|---|
| Jaipong | Блок Jaipong — Включает или отключает первый логический блок советника. |
| Keroncong | Блок Keroncong — Включает или отключает второй логический блок советника. |
| Tortor | Блок Tortor — Включает или отключает третий логический блок советника. |
| MA_Keroncong | Скользящая средняя Keroncong — Включает или отключает использование скользящей средней в блоке Keroncong. |
| Period_MA | Период скользящей средней — Таймфрейм, используемый для расчёта скользящей средней. |
| MaxTrades_Jaipong | Максимум ордеров Jaipong — Максимальное число одновременно открытых ордеров в блоке Jaipong. |
| MaxTrades_Keroncong | Максимум ордеров Keroncong — Максимальное число одновременно открытых ордеров в блоке Keroncong. |
| MaxTrades_Tortor | Максимум ордеров Tortor — Максимальное число одновременно открытых ордеров в блоке Tortor. |
| MagicNumber_Jaipong | Магический номер Jaipong — Идентификатор ордеров, принадлежащих блоку Jaipong. |
| MagicNumber_Keroncong | Магический номер Keroncong — Идентификатор ордеров, принадлежащих блоку Keroncong. |
| MagicNumber_Tortor | Магический номер Tortor — Идентификатор ордеров, принадлежащих блоку Tortor. |
| MaxLots | Максимальный объём — Ограничение максимального объёма позиции. |
| t2 | Настройки времени — Заголовок группы настроек времени. |
| CloseFriday | Закрытие в пятницу — Разрешает или запрещает блокировку новых сделок в пятницу после заданного часа. |
| CloseFridayHour | Час закрытия в пятницу — Час, начиная с которого в пятницу новые сделки не открываются. |
| OpenMondey | Открытие в понедельник — Разрешает или запрещает блокировку новых сделок в начале недели до заданного часа. |
| OpenMondeyHour | Час открытия в понедельник — Час, до которого в начале недели новые сделки не открываются. |
| ____Urdala_News_Investing_____ | Настройки новостей — Заголовок группы настроек новостного фильтра. |
| AvoidNews | Учитывать новости — Включает или отключает учёт новостного фильтра при принятии решения об открытии новых позиций. |
| t3 | Настройки Jaipong — Заголовок группы настроек блока Jaipong. |
| UseTrailingStop_Jaipong | Использовать трейлинг Jaipong — Включает или отключает трейлинг-стоп в блоке Jaipong. |
| TrailingStart_Jaipong | Старт трейлинга Jaipong — Уровень прибыли в пунктах, при достижении которого начинается трейлинг-стоп в блоке Jaipong. |
| TrailingStop_Jaipong | Трейлинг-стоп Jaipong — Величина трейлинг-стопа в пунктах для блока Jaipong. |
| Step_Jaipong | Шаг сетки Jaipong — Базовый шаг между уровнями сетки в блоке Jaipong. |
| Slippage_Jaipong | Проскальзывание Jaipong — Допустимое проскальзывание цены при открытии ордеров блока Jaipong. |
| t4 | Настройки Keroncong — Заголовок группы настроек блока Keroncong. |
| UseTrailingStop_Keroncong | Использовать трейлинг Keroncong — Включает или отключает трейлинг-стоп в блоке Keroncong. |
| TrailingStart_Keroncong | Старт трейлинга Keroncong — Уровень прибыли в пунктах, при достижении которого начинается трейлинг-стоп в блоке Keroncong. |
| TrailingStop_Keroncong | Трейлинг-стоп Keroncong — Величина трейлинг-стопа в пунктах для блока Keroncong. |
| Step_Keroncong | Шаг сетки Keroncong — Базовый шаг между уровнями сетки в блоке Keroncong. |
| Slippage_Keroncong | Проскальзывание Keroncong — Допустимое проскальзывание цены при открытии ордеров блока Keroncong. |
| t5 | Настройки Tortor — Заголовок группы настроек блока Tortor. |
| UseTrailingStop_Tortor | Использовать трейлинг Tortor — Включает или отключает трейлинг-стоп в блоке Tortor. |
| TrailingStart_Tortor | Старт трейлинга Tortor — Уровень прибыли в пунктах, при достижении которого начинается трейлинг-стоп в блоке Tortor. |
| TrailingStop_Tortor | Трейлинг-стоп Tortor — Величина трейлинг-стопа в пунктах для блока Tortor. |
| Step_Tortor | Шаг сетки Tortor — Базовый шаг между уровнями сетки в блоке Tortor. |
| Slippage_Tortor | Проскальзывание Tortor — Допустимое проскальзывание цены при открытии ордеров блока Tortor. |
| T6 | Настройки объёма — Заголовок группы настроек объёма. |
| Lots | Объём — Базовый объём для открытия первой позиции. |
| BaseLotLevel | Базовый уровень объёма — Базовый уровень сетки, до которого объём доливок остаётся неизменным. |
| LotExponent | Коэффициент объёма — Коэффициент, применяемый к объёму доливок после базового уровня. |
| T7 | Настройки тейк-профита — Заголовок группы настроек тейк-профита. |
| TakeProfit | Тейк-профит — Целевой уровень прибыли в пунктах для совокупной позиции. |
| T8 | Дополнительные настройки расстояния — Заголовок группы дополнительных настроек расстояния. |
| DistanceExponent | Коэффициент расстояния — Коэффициент, применяемый к шагу между уровнями сетки после базового уровня. |
| BaseDistanceLevel | Базовый уровень расстояния — Базовый уровень сетки, до которого шаг между ордерами остаётся неизменным. |
Поиск по коду файла
extern bool Jaipong = TRUE;
extern bool Keroncong = TRUE;
extern bool Tortor = TRUE;
bool OrdersSideOptimize = TRUE;
int MinGridLevelForEnable_Strategy_3 = 9999;
extern bool MA_Keroncong = FALSE;
extern int Period_MA = PERIOD_H1;
int Delay_Jaipong = PERIOD_M1;
int Delay_Keroncong = PERIOD_M1;
int Delay_Tortor = PERIOD_M1;
bool StopTradeAfterTP_Jaipong = FALSE;
bool StopTradeAfterTP_Keroncong = FALSE;
bool StopTradeAfterTP_Tortor = FALSE;
int Period = 60;
double LossLimit_Jaipong = -1000000.0;
double LossLimit_Keroncong = -1000000.0;
double LossLimit_Tortor = -1000000.0;
extern int MaxTrades_Jaipong = 12;
extern int MaxTrades_Keroncong = 12;
extern int MaxTrades_Tortor = 12;
bool Auto_MagicNumber = FALSE;
extern int MagicNumber_Jaipong = 11111;
extern int MagicNumber_Keroncong = 22222;
extern int MagicNumber_Tortor = 33333;
double Jai_lot, Jai;
double Ker_lot, Ker;
double Tor_lot, Tor;
double max_loss_J=0;
double max_loss_K=0;
double max_loss_T=0;
int J, K, T;
string a, b, c;
string posJ, posK, posT;
int J_r = 0;
int K_r = 0;
int T_r = 0;
double Jai_r=0;
double Ker_r=0;
double Tor_r=0;
int Gi_108 = 2;
extern double MaxLots = 5.0;
bool MM = FALSE;
bool UseEquityStop = FALSE;
double TotalEquityRisk = 20.0;
extern string t2 = "Time Setting";
extern bool CloseFriday = TRUE;
extern int CloseFridayHour = 17;
extern bool OpenMondey = TRUE;
extern int OpenMondeyHour = 3;
bool UseTimer = FALSE;
int StartHour = 1;
int StopHour = 6;
extern string ____Urdala_News_Investing_____ = "----------Urdala_News_Investing----------";
extern bool AvoidNews = true;
int UTimeDo =61;
int UTimePosle = 61;
int Uoffset = 3;
bool Vhigh = true;
bool Vmedium = false;
bool Vlow = false;
extern string t3 = "Setting for Dancing Jaipong";
bool Gi_220 = FALSE;
double Gd_224 = 48.0;
extern bool UseTrailingStop_Jaipong = FALSE;
double G_pips_236 = 500.0;
extern double TrailingStart_Jaipong = 10.0;
extern double TrailingStop_Jaipong = 5.0;
extern double Step_Jaipong = 30.0;
extern double Slippage_Jaipong = 3.0;
double G_price_280;
double Gd_288;
double Gd_unused_296;
double Gd_unused_304;
double G_price_312;
double G_bid_320;
double G_ask_328;
double Gd_336;
double Gd_344;
bool Gi_360;
string Gs_364 = "Dancing Jaipong";
int Gi_372 = 0;
int Gi_376;
int Gi_380 = 0;
double Lot_Jaipong;
int G_pos_392 = 0;
int OrdersCount1;
double Gd_400 = 0.0;
bool Gi_408 = FALSE;
bool Gi_412 = FALSE;
bool Gi_416 = FALSE;
int Gi_420;
bool Gi_424 = FALSE;
double Gd_428;
double Gd_436;
extern string t4 = "Setting for Dancing Keroncong";
extern bool UseTrailingStop_Keroncong = FALSE;
double G_pips_508 = 500.0;
extern double TrailingStart_Keroncong = 10.0;
extern double TrailingStop_Keroncong = 5.0;
extern double Step_Keroncong = 30.0;
bool Gi_532 = FALSE;
double Gd_536 = 48.0;
extern double Slippage_Keroncong = 3.0;
double G_price_564;
double Gd_572;
double G_price_596;
double G_bid_604;
double G_ask_612;
double Gd_620;
double Gd_628;
double Gd_636;
bool Gi_644;
string Gs_648 = "Dancing Keroncong";
int Gi_656 = 0;
int Gi_660;
int Gi_664 = 0;
double Lot_Keroncong;
int G_pos_676 = 0;
int OrdersCount2;
double Gd_684 = 0.0;
bool Gi_692 = FALSE;
bool Gi_696 = FALSE;
bool Gi_700 = FALSE;
int Gi_704;
bool Gi_708 = FALSE;
double Gd_712;
double Gd_720;
int G_datetime_728 = 1;
extern string t5 = "Setting for Dancing Tortor";
extern bool UseTrailingStop_Tortor = FALSE;
double G_pips_792 = 500.0;
extern double TrailingStart_Tortor = 100.0;
extern double TrailingStop_Tortor = 50.0;
bool Gi_816 = FALSE;
double Gd_820 = 48.0;
extern double Step_Tortor = 300.0;
extern double Slippage_Tortor = 3.0;
double G_price_848;
double Gd_856;
double Gd_unused_864;
double Gd_unused_872;
double G_price_880;
double G_bid_888;
double G_ask_896;
double Gd_904;
double Gd_912;
double Gd_920;
bool Gi_928;
string Gs_932 = "Dancing Tortor";
int Gi_940 = 0;
int Gi_944;
int Gi_948 = 0;
double Lot_Tortor;
int G_pos_960 = 0;
int OrdersCount3;
double Gd_968 = 0.0;
bool Gi_976 = FALSE;
bool Gi_980 = FALSE;
bool Gi_984 = FALSE;
int Gi_988;
bool Gi_992 = FALSE;
double Gd_996;
double Gd_1004;
int G_datetime_1012 = 1;
int Jaipong_Datetime = 1;
bool G_corner_1052 = TRUE;
int Gi_1056 = 0;
int Gi_1060 = 10;
int G_window_1064 = 0;
bool Gi_1068 = TRUE;
bool Gi_unused_1072 = TRUE;
bool Gi_1076 = FALSE;
int G_color_1080 = Gray;
int G_color_1084 = Gray;
int G_color_1088 = Gray;
int G_color_1092 = DarkOrange;
int Gi_unused_1096 = 36095;
int G_color_1100 = Lime;
int G_color_1104 = OrangeRed;
int Gi_1108 = 65280;
int Gi_1112 = 17919;
int G_color_1116 = Lime;
int G_color_1120 = Red;
int G_color_1124 = Orange;
int G_period_1128 = 8;
int G_period_1132 = 17;
int G_period_1136 = 9;
int G_applied_price_1140 = PRICE_CLOSE;
int G_color_1144 = Lime;
int G_color_1148 = Tomato;
int G_color_1152 = Green;
int G_color_1156 = Red;
int G_period_1176 = 9;
int G_applied_price_1180 = PRICE_CLOSE;
int G_period_1192 = 13;
int G_applied_price_1196 = PRICE_CLOSE;
int G_period_1208 = 5;
int G_period_1212 = 3;
int G_slowing_1216 = 3;
int G_ma_method_1220 = MODE_EMA;
int G_color_1232 = Lime;
int G_color_1236 = Red;
int G_color_1240 = Orange;
int G_period_1252 = 5;
int G_period_1256 = 9;
int G_ma_method_1260 = MODE_EMA;
int G_applied_price_1264 = PRICE_CLOSE;
int G_color_1276 = Lime;
int G_color_1280 = Red;
string Gs_dummy_1292;
string G_text_1464;
string G_text_1472;
bool Gi_1480 = FALSE;//TRUE;
int Gi_1492;
int G_str2int_1496;
int G_str2int_1500;
int G_str2int_1504;
extern string T6 = "Lots settings";
extern double Lots = 0.01;
extern int BaseLotLevel = 3;
extern double LotExponent = 1.5;
extern string T7 = "Take profit settings";
bool AutoGridStepAndProfit = false;
extern double TakeProfit = 50.0;
extern string T8 = "Additional distance settings";
extern double DistanceExponent = 1.1;
extern int BaseDistanceLevel = 3;
double PreviousMinute = -1.0;
int PreviousHour = -1;
int init()
{
// код доступен только после оплаты
}
int start() {
// код доступен только после оплаты
}
int f0_4() { //??????? ???????? ???. Jaipong
int count_0 = 0;
for (int pos_4 = OrdersTotal() - 1; pos_4 >= 0; pos_4--) {
OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong)
if (OrderType() == OP_SELL || OrderType() == OP_BUY) count_0++;
}
return (count_0);
}
void f0_24() { //???????? ???? Jaipong
for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {
OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage_Jaipong, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage_Jaipong, Red);
}
Sleep(1000);
}
}
}
int f0_3(int Ai_0, double A_lots_4, double A_price_12, int A_slippage_20, double Ad_24, int Ai_32, int Ai_36, string A_comment_40, int A_magic_48, int A_datetime_52, color A_color_56) {
int ticket_60 = 0;
int error_64 = 0;
int count_68 = 0;
int Li_72 = 100;
switch (Ai_0) {
case 2:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_22(Ad_24, Ai_32), f0_19(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(1000);
}
break;
case 4:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, A_lots_4, A_price_12, A_slippage_20, f0_22(Ad_24, Ai_32), f0_19(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 0:
for (count_68 = 0; count_68 < Li_72; count_68++) {
RefreshRates();
ticket_60 = OrderSend(Symbol(), OP_BUY, A_lots_4, Ask, A_slippage_20, f0_22(Bid, Ai_32), f0_19(Ask, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
PlaySound("jaipong.wav");
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 3:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_11(Ad_24, Ai_32), f0_1(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 5:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, A_lots_4, A_price_12, A_slippage_20, f0_11(Ad_24, Ai_32), f0_1(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 1:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELL, A_lots_4, Bid, A_slippage_20, f0_11(Ask, Ai_32), f0_1(Bid, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
PlaySound("jaipong.wav");
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
}
return (ticket_60);
}
double f0_22(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 - Ai_8 * Point);
}
double f0_11(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 + Ai_8 * Point);
}
double f0_19(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 + Ai_8 * Point);
}
double f0_1(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 - Ai_8 * Point);
}
double f0_31() {
double Ld_ret_0 = 0;
for (G_pos_392 = OrdersTotal() - 1; G_pos_392 >= 0; G_pos_392--) {
OrderSelect(G_pos_392, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong)
if (OrderType() == OP_BUY || OrderType() == OP_SELL) Ld_ret_0 += OrderProfit();
}
return (Ld_ret_0);
}
void f0_35(int Ai_0, int Ai_4, double A_price_8) {
int Li_16;
double order_stoploss_20;
double price_28;
if (Ai_4 != 0) {
for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber_Jaipong) {
if (OrderType() == OP_BUY) {
Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
if (Li_16 < Ai_0) continue;
order_stoploss_20 = OrderStopLoss();
price_28 = Bid - Ai_4 * Point;
if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
}
if (OrderType() == OP_SELL) {
Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
if (Li_16 < Ai_0) continue;
order_stoploss_20 = OrderStopLoss();
price_28 = Ask + Ai_4 * Point;
if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
}
}
Sleep(1000);
}
}
}
}
double f0_7() {
if (f0_4() == 0) Gd_428 = AccountEquity();
if (Gd_428 < Gd_436) Gd_428 = Gd_436;
else Gd_428 = AccountEquity();
Gd_436 = AccountEquity();
return (Gd_428);
}
double f0_32() {
double order_open_price_0;
int ticket_8;
double Ld_unused_12 = 0;
int ticket_20 = 0;
for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong && OrderType() == OP_BUY) {
ticket_8 = OrderTicket();
if (ticket_8 > ticket_20) {
order_open_price_0 = OrderOpenPrice();
Ld_unused_12 = order_open_price_0;
ticket_20 = ticket_8;
}
}
}
return (order_open_price_0);
}
double f0_20() {
double order_open_price_0;
int ticket_8;
double Ld_unused_12 = 0;
int ticket_20 = 0;
for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Jaipong) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong && OrderType() == OP_SELL) {
ticket_8 = OrderTicket();
if (ticket_8 > ticket_20) {
order_open_price_0 = OrderOpenPrice();
Ld_unused_12 = order_open_price_0;
ticket_20 = ticket_8;
}
}
}
return (order_open_price_0);
}
int f0_5() {
int count_0 = 0;
for (int pos_4 = OrdersTotal() - 1; pos_4 >= 0; pos_4--) {
OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong)
if (OrderType() == OP_SELL || OrderType() == OP_BUY) count_0++;
}
return (count_0);
}
void f0_18() {
for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {
OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage_Keroncong, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage_Keroncong, Red);
}
Sleep(1000);
}
}
}
int f0_2(int Ai_0, double A_lots_4, double A_price_12, int A_slippage_20, double Ad_24, int Ai_32, int Ai_36, string A_comment_40, int A_magic_48, int A_datetime_52, color A_color_56) {
int ticket_60 = 0;
int error_64 = 0;
int count_68 = 0;
int Li_72 = 100;
switch (Ai_0) {
case 2:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_13(Ad_24, Ai_32), f0_25(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(1000);
}
break;
case 4:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, A_lots_4, A_price_12, A_slippage_20, f0_13(Ad_24, Ai_32), f0_25(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 0:
for (count_68 = 0; count_68 < Li_72; count_68++) {
RefreshRates();
ticket_60 = OrderSend(Symbol(), OP_BUY, A_lots_4, Ask, A_slippage_20, f0_13(Bid, Ai_32), f0_25(Ask, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
PlaySound("keroncong.wav");
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 3:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_33(Ad_24, Ai_32), f0_26(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 5:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, A_lots_4, A_price_12, A_slippage_20, f0_33(Ad_24, Ai_32), f0_26(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 1:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELL, A_lots_4, Bid, A_slippage_20, f0_33(Ask, Ai_32), f0_26(Bid, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
PlaySound("keroncong.wav");
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
}
return (ticket_60);
}
double f0_13(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 - Ai_8 * Point);
}
double f0_33(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 + Ai_8 * Point);
}
double f0_25(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 + Ai_8 * Point);
}
double f0_26(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 - Ai_8 * Point);
}
double f0_29() {
double Ld_ret_0 = 0;
for (G_pos_676 = OrdersTotal() - 1; G_pos_676 >= 0; G_pos_676--) {
OrderSelect(G_pos_676, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong)
if (OrderType() == OP_BUY || OrderType() == OP_SELL) Ld_ret_0 += OrderProfit();
}
return (Ld_ret_0);
}
void f0_21(int Ai_0, int Ai_4, double A_price_8) {
int Li_16;
double order_stoploss_20;
double price_28;
if (Ai_4 != 0) {
for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber_Keroncong) {
if (OrderType() == OP_BUY) {
Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
if (Li_16 < Ai_0) continue;
order_stoploss_20 = OrderStopLoss();
price_28 = Bid - Ai_4 * Point;
if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
}
if (OrderType() == OP_SELL) {
Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
if (Li_16 < Ai_0) continue;
order_stoploss_20 = OrderStopLoss();
price_28 = Ask + Ai_4 * Point;
if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
}
}
Sleep(1000);
}
}
}
}
double f0_16() {
if (f0_5() == 0) Gd_712 = AccountEquity();
if (Gd_712 < Gd_720) Gd_712 = Gd_720;
else Gd_712 = AccountEquity();
Gd_720 = AccountEquity();
return (Gd_712);
}
double f0_36() {
double order_open_price_0;
int ticket_8;
double Ld_unused_12 = 0;
int ticket_20 = 0;
for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong && OrderType() == OP_BUY) {
ticket_8 = OrderTicket();
if (ticket_8 > ticket_20) {
order_open_price_0 = OrderOpenPrice();
Ld_unused_12 = order_open_price_0;
ticket_20 = ticket_8;
}
}
}
return (order_open_price_0);
}
double f0_28() {
double order_open_price_0;
int ticket_8;
double Ld_unused_12 = 0;
int ticket_20 = 0;
for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Keroncong) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong && OrderType() == OP_SELL) {
ticket_8 = OrderTicket();
if (ticket_8 > ticket_20) {
order_open_price_0 = OrderOpenPrice();
Ld_unused_12 = order_open_price_0;
ticket_20 = ticket_8;
}
}
}
return (order_open_price_0);
}
int f0_12() {
int count_0 = 0;
for (int pos_4 = OrdersTotal() - 1; pos_4 >= 0; pos_4--) {
OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor)
if (OrderType() == OP_SELL || OrderType() == OP_BUY) count_0++;
}
return (count_0);
}
void f0_0() {
for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {
OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol()) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor) {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage_Tortor, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage_Tortor, Red);
}
Sleep(1000);
}
}
}
int f0_6(int Ai_0, double A_lots_4, double A_price_12, int A_slippage_20, double Ad_24, int Ai_32, int Ai_36, string A_comment_40, int A_magic_48, int A_datetime_52, color A_color_56) {
int ticket_60 = 0;
int error_64 = 0;
int count_68 = 0;
int Li_72 = 100;
switch (Ai_0) {
case 2:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_14(Ad_24, Ai_32), f0_9(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(1000);
}
break;
case 4:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, A_lots_4, A_price_12, A_slippage_20, f0_14(Ad_24, Ai_32), f0_9(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 0:
for (count_68 = 0; count_68 < Li_72; count_68++) {
RefreshRates();
ticket_60 = OrderSend(Symbol(), OP_BUY, A_lots_4, Ask, A_slippage_20, f0_14(Bid, Ai_32), f0_9(Ask, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
PlaySound("tortor.wav");
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 3:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, A_lots_4, A_price_12, A_slippage_20, f0_23(Ad_24, Ai_32), f0_10(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 5:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, A_lots_4, A_price_12, A_slippage_20, f0_23(Ad_24, Ai_32), f0_10(A_price_12, Ai_36), A_comment_40, A_magic_48, A_datetime_52,
A_color_56);
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
break;
case 1:
for (count_68 = 0; count_68 < Li_72; count_68++) {
ticket_60 = OrderSend(Symbol(), OP_SELL, A_lots_4, Bid, A_slippage_20, f0_23(Ask, Ai_32), f0_10(Bid, Ai_36), A_comment_40, A_magic_48, A_datetime_52, A_color_56);
PlaySound("tortor.wav");
error_64 = GetLastError();
if (error_64 == 0/* NO_ERROR */) break;
if (!((error_64 == 4/* SERVER_BUSY */ || error_64 == 137/* BROKER_BUSY */ || error_64 == 146/* TRADE_CONTEXT_BUSY */ || error_64 == 136/* OFF_QUOTES */))) break;
Sleep(5000);
}
}
return (ticket_60);
}
double f0_14(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 - Ai_8 * Point);
}
double f0_23(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 + Ai_8 * Point);
}
double f0_9(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 + Ai_8 * Point);
}
double f0_10(double Ad_0, int Ai_8) {
if (Ai_8 == 0) return (0);
return (Ad_0 - Ai_8 * Point);
}
double f0_8() {
double Ld_ret_0 = 0;
for (G_pos_960 = OrdersTotal() - 1; G_pos_960 >= 0; G_pos_960--) {
OrderSelect(G_pos_960, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor)
if (OrderType() == OP_BUY || OrderType() == OP_SELL) Ld_ret_0 += OrderProfit();
}
return (Ld_ret_0);
}
void f0_34(int Ai_0, int Ai_4, double A_price_8) {
int Li_16;
double order_stoploss_20;
double price_28;
if (Ai_4 != 0) {
for (int pos_36 = OrdersTotal() - 1; pos_36 >= 0; pos_36--) {
if (OrderSelect(pos_36, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber_Tortor) {
if (OrderType() == OP_BUY) {
Li_16 = NormalizeDouble((Bid - A_price_8) / Point, 0);
if (Li_16 < Ai_0) continue;
order_stoploss_20 = OrderStopLoss();
price_28 = Bid - Ai_4 * Point;
if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 > order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Aqua);
}
if (OrderType() == OP_SELL) {
Li_16 = NormalizeDouble((A_price_8 - Ask) / Point, 0);
if (Li_16 < Ai_0) continue;
order_stoploss_20 = OrderStopLoss();
price_28 = Ask + Ai_4 * Point;
if (order_stoploss_20 == 0.0 || (order_stoploss_20 != 0.0 && price_28 < order_stoploss_20)) OrderModify(OrderTicket(), A_price_8, price_28, OrderTakeProfit(), 0, Red);
}
}
Sleep(1000);
}
}
}
}
double f0_30() {
if (f0_12() == 0) Gd_996 = AccountEquity();
if (Gd_996 < Gd_1004) Gd_996 = Gd_1004;
else Gd_996 = AccountEquity();
Gd_1004 = AccountEquity();
return (Gd_996);
}
double f0_17() {
double order_open_price_0;
int ticket_8;
double Ld_unused_12 = 0;
int ticket_20 = 0;
for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor && OrderType() == OP_BUY) {
ticket_8 = OrderTicket();
if (ticket_8 > ticket_20) {
order_open_price_0 = OrderOpenPrice();
Ld_unused_12 = order_open_price_0;
ticket_20 = ticket_8;
}
}
}
return (order_open_price_0);
}
double f0_27() {
double order_open_price_0;
int ticket_8;
double Ld_unused_12 = 0;
int ticket_20 = 0;
for (int pos_24 = OrdersTotal() - 1; pos_24 >= 0; pos_24--) {
OrderSelect(pos_24, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_Tortor) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor && OrderType() == OP_SELL) {
ticket_8 = OrderTicket();
if (ticket_8 > ticket_20) {
order_open_price_0 = OrderOpenPrice();
Ld_unused_12 = order_open_price_0;
ticket_20 = ticket_8;
}
}
}
return (order_open_price_0);
}
double GetTakeProfit(int GridLevel)
{
double Profit;
switch(GridLevel)
{
case 0: Profit = TakeProfit; break;
default: Profit = TakeProfit; break;
}
return NormalizeDouble(Profit,2);
}
double GetLotExponent(int GridLevel)
{
double Exponent;
if(GridLevel < BaseLotLevel)
{
Exponent = 1;
}
else
{
Exponent = LotExponent;
}
return(Exponent);
}
bool AllowTradeTime(){
if((UseTimer==TRUE && Hour() >= StartHour && Hour() <= StopHour) || UseTimer==FALSE)
{
return true;
}
else
{
return false;
}
}
double CheckLotSize(double Lot)
{
if(Lot > MaxLots)
{
Lot = MaxLots;
}
return Lot;
}
double GetDistance(int GridLevel, int StrategyNumber)
{
double Distance;
double Exponent;
GridLevel++;
if(GridLevel <= BaseDistanceLevel)
{
Exponent = 1;
}
else
{
Exponent = DistanceExponent;
}
switch(StrategyNumber)
{
case 1 : Distance = NormalizeDouble(Step_Jaipong * MathPow(Exponent, (GridLevel-BaseDistanceLevel)), 1); break;
case 2 : Distance = NormalizeDouble(Step_Keroncong * MathPow(Exponent, (GridLevel-BaseDistanceLevel)), 1); break;
case 3 : Distance = NormalizeDouble(Step_Tortor * MathPow(Exponent, (GridLevel-BaseDistanceLevel)), 1); break;
}
return(Distance);
}
bool OrdersSideOptimization(int Magic, int Side)
{
if(!OrdersSideOptimize)
{
return(true);
}
int JaipongSide = 0;
int KeroncongSide = 0;
int TortorSide = 0;
double JaipongLots = 0.0;
double KeroncongLots = 0.0;
double TortorLots = 0.0;
int JaipongTotalOrders = 0;
int KeroncongTotalOrders = 0;
int TortorTotalOrders = 0;
int MinOrders = MinGridLevelForEnable_Strategy_3;
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || (OrderMagicNumber() != MagicNumber_Jaipong && OrderMagicNumber() != MagicNumber_Keroncong && OrderMagicNumber() != MagicNumber_Tortor)) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong && OrderType() == OP_BUY)
{
JaipongLots += OrderLots();
JaipongSide = 1;
JaipongTotalOrders++;
}
else if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Jaipong && OrderType() == OP_SELL)
{
JaipongLots += OrderLots();
JaipongSide = -1;
JaipongTotalOrders++;
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong && OrderType() == OP_BUY)
{
KeroncongLots += OrderLots();
KeroncongSide = 1;
KeroncongTotalOrders++;
}
else if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Keroncong && OrderType() == OP_SELL)
{
KeroncongLots += OrderLots();
KeroncongSide = -1;
KeroncongTotalOrders++;
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor && OrderType() == OP_BUY)
{
TortorLots += OrderLots();
TortorSide = 1;
TortorTotalOrders++;
}
else if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Tortor && OrderType() == OP_SELL)
{
TortorLots += OrderLots();
TortorSide = -1;
TortorTotalOrders++;
}
}
/*Comment(
"\n JaipongLots: "+JaipongLots
+"\n JaipongSide: "+JaipongSide
+"\n JaipongTotalOrders: "+JaipongTotalOrders
+"\n"
+"\n KeroncongLots: "+KeroncongLots
+"\n KeroncongSide: "+KeroncongSide
+"\n KeroncongTotalOrders: "+KeroncongTotalOrders
+"\n"
+"\n TortorLots: "+TortorLots
+"\n TortorSide: "+TortorSide
+"\n TortorTotalOrders: "+TortorTotalOrders
);
*/
if(JaipongSide == 0 && KeroncongSide == 0 && TortorSide == 0)
{
return(true);
}
if(Magic == MagicNumber_Jaipong)
{
if(Side == 1)
{
if((TortorSide == -1 && KeroncongSide == 0) || (KeroncongSide == -1 && TortorSide == 0))
{
return(true);
}
else if((TortorSide == 1 && KeroncongSide == -1 && TortorLots < KeroncongLots && KeroncongTotalOrders >= MinOrders) || (KeroncongSide == 1 && TortorSide == -1 && KeroncongLots < TortorLots && TortorTotalOrders >= MinOrders))
{
return(true);
}
else
{
return(false);
}
}
else if(Side == -1)
{
if((TortorSide == 1 && KeroncongSide == 0) || (KeroncongSide == 1 && TortorSide == 0))
{
return(true);
}
else if((TortorSide == -1 && KeroncongSide == 1 && TortorLots < KeroncongLots && KeroncongTotalOrders >= MinOrders) || (KeroncongSide == -1 && TortorSide == 1 && KeroncongLots < TortorLots && TortorTotalOrders >= MinOrders))
{
return(true);
}
else
{
return(false);
}
}
}
if(Magic == MagicNumber_Keroncong)
{
if(Side == 1)
{
if((JaipongSide == -1 && TortorSide == 0) || (TortorSide == -1 && JaipongSide == 0))
{
return(true);
}
else if((JaipongSide == 1 && TortorSide == -1 && JaipongLots < TortorLots && TortorTotalOrders >= MinOrders) || (TortorSide == 1 && JaipongSide == -1 && TortorLots < JaipongLots && JaipongTotalOrders >= MinOrders))
{
return(true);
}
else
{
return(false);
}
}
else if(Side == -1)
{
if((JaipongSide == 1 && TortorSide == 0) || (TortorSide == 1 && JaipongSide == 0))
{
return(true);
}
else if((JaipongSide == -1 && TortorSide == 1 && JaipongLots < TortorLots && TortorTotalOrders >= MinOrders) || (TortorSide == -1 && JaipongSide == 1 && TortorLots < JaipongLots && JaipongTotalOrders >= MinOrders))
{
return(true);
}
else
{
return(false);
}
}
}
if(Magic == MagicNumber_Tortor)
{
if(Side == 1)
{
if((JaipongSide == -1 && KeroncongSide == 0) || (KeroncongSide == -1 && JaipongSide == 0))
{
return(true);
}
else if((JaipongSide == 1 && KeroncongSide == -1 && JaipongLots < KeroncongLots && KeroncongTotalOrders >= MinOrders) || (KeroncongSide == 1 && JaipongSide == -1 && KeroncongLots < JaipongLots && JaipongTotalOrders >= MinOrders))
{
return(true);
}
else
{
return(false);
}
}
else if(Side == -1)
{
if((JaipongSide == 1 && KeroncongSide == 0) || (KeroncongSide == 1 && JaipongSide == 0))
{
return(true);
}
else if((JaipongSide == -1 && KeroncongSide == 1 && JaipongLots < KeroncongLots && KeroncongTotalOrders >= MinOrders) || (KeroncongSide == -1 && JaipongSide == 1 && KeroncongLots < JaipongLots && JaipongTotalOrders >= MinOrders))
{
return(true);
}
else
{
return(false);
}
}
}
Print("Something wrong with function \"OrdersSideOptimization\".");
return(false);
}
void SetTakeProfit(int MagicNumber, double TakeProfit_)
{
double avgPrice = 0.0;
double sumLots = 0.0;
int orderType;
int returnvalue;
for (int order=OrdersTotal()-1; order >= 0; order--)
{
returnvalue=OrderSelect(order, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
orderType = OrderType();
avgPrice += OrderOpenPrice()*OrderLots();
sumLots += OrderLots();
}
}
if(avgPrice == 0.0 || sumLots == 0.0)
{
return;
}
double newTakeProfit=avgPrice/sumLots;
if (orderType==OP_BUY)
newTakeProfit=newTakeProfit+TakeProfit_*Point;
else
newTakeProfit=newTakeProfit-TakeProfit_*Point;
newTakeProfit=NormalizeDouble(newTakeProfit,Digits);
for (order=OrdersTotal()-1; order>=0; order--)
{
returnvalue=OrderSelect(order, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && (OrderTakeProfit() != newTakeProfit))
{
returnvalue=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),newTakeProfit,0,clrYellow);
}
}
}
bool Weekend()
{
if ((CloseFriday == TRUE && DayOfWeek() == 5 && TimeCurrent() >= StrToTime(CloseFridayHour + ":00")) || (OpenMondey == TRUE && DayOfWeek() == 1 && TimeCurrent() <= StrToTime(OpenMondeyHour + ":00")))
{
return true;
}
else
{
return false;
}
}
bool News()
{
if(!AvoidNews)
{
return false;
}
if (iCustom(Symbol(),0,"urdala_news_investing.com",UTimeDo,UTimePosle,Uoffset,Vhigh,Vmedium,Vlow,0,0))
{
return true;
}
else
{
return false;
}
}
bool AutoGridStep()
{
if(!AutoGridStepAndProfit)
{
return true;
}
if(Bars(Symbol(), PERIOD_D1) < 6)
{
Alert(Symbol()+": Bars count PERIOD_D1 < 6. Expert Removed from chart!");
return false;
}
int Days = 5;
double sum_rng = 0.0;
double avg_rng = 0.0;
for(int i=1;i<=Days;i++) {
double rng=(iHigh(Symbol(),PERIOD_D1,i)-iLow(Symbol(),PERIOD_D1,i));
sum_rng+=rng;
}
avg_rng = (sum_rng/Point)/Days;
Step_Keroncong = NormalizeDouble(avg_rng/3+TakeProfit,0);
Step_Jaipong = NormalizeDouble(avg_rng/3+TakeProfit,0);
Step_Tortor = NormalizeDouble(avg_rng/3+TakeProfit,0);
TakeProfit = NormalizeDouble(Step_Keroncong/10,0);
return true;
}i c N u m b e r ( ) = = M a g i c N u m b e r _ J a i p o n g )
i f ( O r d e r T y p e ( ) = = O P _ S E L L | | O r d e r T y p e ( ) = = O P _ B U Y ) c o u n t _ 0 + + ;
}
r e t u r n ( c o u n t _ 0 ) ;
}
v o i d f 0 _ 2 4 ( ) { / / 70:@KB85 2A5E J a i p o n g
f o r ( i n t p o s _ 0 = O r d e r s T o t a l ( ) - 1 ; p o s _ 0 >