Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
09.07.2015, 03:05
Лучший ответ
Выплачено: 15893 RUB
Сообщение от horoose Посмотреть сообщение
Необходимо чтобы в точке средней между двух
Средняя точка между двумя точками рассчитывается по другому. Берётся точка, имеющая наибольшее значение и от её величины
вычитается значение точки с меньшим значением. Затем полученную величину делим пополам. Теперь к меньшей точки прибавляем
эту половину.
08.08.2015, 16:29
Лучший ответ
Выплачено: 9223 RUB
Добрый день.

Господа, помогите разобраться,

мне нужно чтоб общий профит уменьшался с открытием еще одного ордера в том же направлении, например:
Открыт ордер на покупку с TakeProfit 100 p, при просадке в 30 пунктов открывается еще один ордер на покупку, но большим объемом (например в 2 раза) и вот здесь нужно чтоб профит уменьшился на 2. В этом коде TakeProfit не меняется
MQL-Код:

double Ld_1160 = LotExponent; int Li_1168 = Gi_108; double Ld_1172 = TakeProfit; bool bool_1180 = UseEquityStop; double Ld_1184 = TotalEquityRisk; if (MM == TRUE) { if (MathCeil(AccountBalance()) < 2000.0) Ld_1192 = Lots; else Ld_1192 = 0.00001 * MathCeil(AccountBalance()); } else Ld_1192 = NormalizeDouble(AccountBalance() * Risk / 2000.0, 2); if ((CloseFriday == TRUE && DayOfWeek() == 5 && TimeCurrent() >= StrToTime(CloseFridayHour + ":00")) || (OpenMondey == TRUE && DayOfWeek() == 1 && TimeCurrent() <= StrToTime(OpenMondeyHour + ":00"))) return (0); if (UseTrailingStop_Hilo) f0_35(TrailStart_Hilo, TrailStop_Hilo, G_price_312); if (Gi_220) { if (TimeCurrent() >= Gi_376) { f0_24(); Print("Closed All due_Hilo to TimeOut"); } } if (Gi_372 == Time[0]) return (0); Gi_372 = Time[0]; double Ld_1200 = f0_31(); if (bool_1180) { if (Ld_1200 < 0.0 && MathAbs(Ld_1200) > Ld_1184 / 100.0 * f0_7()) { f0_24(); Print("Closed All due_Hilo to Stop Out"); Gi_424 = FALSE; } } Gi_396 = f0_4(); if (Gi_396 == 0) Gi_360 = FALSE; 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_Hilo) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_BUY) { Gi_412 = TRUE; Gi_416 = FALSE; break; } } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_SELL) { Gi_412 = FALSE; Gi_416 = TRUE; break; } } } if (Gi_396 > 0 && Gi_396 <= MaxTrades_Hilo) { RefreshRates(); Gd_336 = f0_32(); Gd_344 = f0_20(); if (Gi_412 && Gd_336 - Ask >= PipStep_Hilo * Point) Gi_408 = TRUE; if (Gi_416 && Bid - Gd_344 >= PipStep_Hilo * Point) Gi_408 = TRUE; } if (Gi_396 < 1) { Gi_416 = FALSE; Gi_412 = FALSE; Gi_408 = TRUE; Gd_288 = AccountEquity(); } if (Gi_408) { Gd_336 = f0_32(); Gd_344 = f0_20(); if (Gi_416) { Gi_380 = Gi_396; Gd_384 = NormalizeDouble(Ld_1192 * MathPow(Ld_1160, Gi_380), Li_1168); RefreshRates(); Gi_420 = f0_3(1, Gd_384, Bid, slip_Hilo, Ask, 0, 0, Gs_364 + "-" + Gi_380, MagicNumber_Hilo, 0, HotPink); if (Gi_420 < 0) { Print("Error: ", GetLastError()); return (0); } Gd_344 = f0_20(); Gi_408 = FALSE; Gi_424 = TRUE; } else { if (Gi_412) { Gi_380 = Gi_396; Gd_384 = NormalizeDouble(Ld_1192 * MathPow(Ld_1160, Gi_380), Li_1168); Gi_420 = f0_3(0, Gd_384, Ask, slip_Hilo, Bid, 0, 0, Gs_364 + "-" + Gi_380, MagicNumber_Hilo, 0, Lime); if (Gi_420 < 0) { Print("Error: ", GetLastError()); return (0); } Gd_336 = f0_32(); Gi_408 = FALSE; Gi_424 = TRUE; } } } if (Gi_408 && Gi_396 < 1) { ihigh_1128 = iHigh(Symbol(), 0, 1); ilow_1136 = iLow(Symbol(), 0, 2); G_bid_320 = Bid; G_ask_328 = Ask; if ((!Gi_416) && !Gi_412) { Gi_380 = Gi_396; Gd_384 = NormalizeDouble(Ld_1192 * MathPow(Ld_1160, Gi_380), Li_1168); if (ihigh_1128 > ilow_1136) { if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > 30.0) { Gi_420 = f0_3(1, Gd_384, G_bid_320, slip_Hilo, G_bid_320, 0, 0, Gs_364 + "-" + Gi_380, MagicNumber_Hilo, 0, HotPink); if (Gi_420 < 0) { Print("Error: ", GetLastError()); return (0); } Gd_336 = f0_32(); Gi_424 = TRUE; } } else { if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < 70.0) { Gi_420 = f0_3(0, Gd_384, G_ask_328, slip_Hilo, G_ask_328, 0, 0, Gs_364 + "-" + Gi_380, MagicNumber_Hilo, 0, Lime); if (Gi_420 < 0) { Print("Error: ", GetLastError()); return (0); } Gd_344 = f0_20(); Gi_424 = TRUE; } } if (Gi_420 > 0) Gi_376 = TimeCurrent() + 60.0 * (60.0 * Gd_224); Gi_408 = FALSE; } } Gi_396 = f0_4(); G_price_312 = 0; double Ld_1208 = 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_Hilo) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { G_price_312 += OrderOpenPrice() * OrderLots(); Ld_1208 += OrderLots(); } } } if (Gi_396 > 0) G_price_312 = NormalizeDouble(G_price_312 / Ld_1208, Digits); if (Gi_424) { 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_Hilo) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_BUY) { G_price_280 = G_price_312 + Ld_1172 * Point; Gd_unused_296 = G_price_280; Gd_400 = G_price_312 - G_pips_236 * Point; Gi_360 = TRUE; } } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_SELL) { G_price_280 = G_price_312 - Ld_1172 * Point; Gd_unused_304 = G_price_280; Gd_400 = G_price_312 + G_pips_236 * Point; Gi_360 = TRUE; } } } } if (Gi_424) { if (Gi_360 == TRUE) { 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_Hilo) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) OrderModify(OrderTicket(), G_price_312, OrderStopLoss(), G_price_280, 0, Yellow); Gi_424 = FALSE; } } }
  • #1 Свернуть

    Помогите разабраться с кодом mql4

    Добрый день.

    Господа, помогите разобраться,

    Необходимо чтобы в точке средней между двух Ibands искасаль точка и при касании ее ценой срабатывало закрытие всех ордеров.

    (Type == 1 - это ордера на продажу
    (Type == 0 это ордера на покупку
    Size() >= 1 - это размер лота.

    Верно ли написан код ниже? В тестере не работает хотя ошибок не пишет.

    код ниже:

    MQL код:
    bool CloseOnBigBar(){
    if(
    Size() >= 1 &&
    (
    (Type == 1 && Bid <= iBands(NULL,0,1440,3,0,PRICE_CLOSE,MODE_LOWER,0)/2 + iBands(NULL,0,1240,3,0,PRICE_CLOSE,MODE_UPPER,0)/2)
    ||
    (Type == 0 && Bid >= iBands(NULL,0,1440,3,0,PRICE_CLOSE,MODE_UPPER,0)/2 +iBands(NULL,0,1240,3,0,PRICE_CLOSE,MODE_UPPER,0)/2)

    )
    ){
    return CloseAll();
    }
    return false;
    };
    Последний раз редактировалось Gold; 09.07.2015, 02:18.
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от horoose Посмотреть сообщение
    Необходимо чтобы в точке средней между двух
    Средняя точка между двумя точками рассчитывается по другому. Берётся точка, имеющая наибольшее значение и от её величины
    вычитается значение точки с меньшим значением. Затем полученную величину делим пополам. Теперь к меньшей точки прибавляем
    эту половину.

    Комментарий

    • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
    • #3 Свернуть

      Добрый день.

      Господа, помогите разобраться,

      мне нужно чтоб общий профит уменьшался с открытием еще одного ордера в том же направлении, например:
      Открыт ордер на покупку с TakeProfit 100 p, при просадке в 30 пунктов открывается еще один ордер на покупку, но большим объемом (например в 2 раза) и вот здесь нужно чтоб профит уменьшился на 2. В этом коде TakeProfit не меняется
      MQL-Код:

      double Ld_1160 = LotExponent; int Li_1168 = Gi_108; double Ld_1172 = TakeProfit; bool bool_1180 = UseEquityStop; double Ld_1184 = TotalEquityRisk; if (MM == TRUE) { if (MathCeil(AccountBalance()) < 2000.0) Ld_1192 = Lots; else Ld_1192 = 0.00001 * MathCeil(AccountBalance()); } else Ld_1192 = NormalizeDouble(AccountBalance() * Risk / 2000.0, 2); if ((CloseFriday == TRUE && DayOfWeek() == 5 && TimeCurrent() >= StrToTime(CloseFridayHour + ":00")) || (OpenMondey == TRUE && DayOfWeek() == 1 && TimeCurrent() <= StrToTime(OpenMondeyHour + ":00"))) return (0); if (UseTrailingStop_Hilo) f0_35(TrailStart_Hilo, TrailStop_Hilo, G_price_312); if (Gi_220) { if (TimeCurrent() >= Gi_376) { f0_24(); Print("Closed All due_Hilo to TimeOut"); } } if (Gi_372 == Time[0]) return (0); Gi_372 = Time[0]; double Ld_1200 = f0_31(); if (bool_1180) { if (Ld_1200 < 0.0 && MathAbs(Ld_1200) > Ld_1184 / 100.0 * f0_7()) { f0_24(); Print("Closed All due_Hilo to Stop Out"); Gi_424 = FALSE; } } Gi_396 = f0_4(); if (Gi_396 == 0) Gi_360 = FALSE; 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_Hilo) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_BUY) { Gi_412 = TRUE; Gi_416 = FALSE; break; } } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_SELL) { Gi_412 = FALSE; Gi_416 = TRUE; break; } } } if (Gi_396 > 0 && Gi_396 <= MaxTrades_Hilo) { RefreshRates(); Gd_336 = f0_32(); Gd_344 = f0_20(); if (Gi_412 && Gd_336 - Ask >= PipStep_Hilo * Point) Gi_408 = TRUE; if (Gi_416 && Bid - Gd_344 >= PipStep_Hilo * Point) Gi_408 = TRUE; } if (Gi_396 < 1) { Gi_416 = FALSE; Gi_412 = FALSE; Gi_408 = TRUE; Gd_288 = AccountEquity(); } if (Gi_408) { Gd_336 = f0_32(); Gd_344 = f0_20(); if (Gi_416) { Gi_380 = Gi_396; Gd_384 = NormalizeDouble(Ld_1192 * MathPow(Ld_1160, Gi_380), Li_1168); RefreshRates(); Gi_420 = f0_3(1, Gd_384, Bid, slip_Hilo, Ask, 0, 0, Gs_364 + "-" + Gi_380, MagicNumber_Hilo, 0, HotPink); if (Gi_420 < 0) { Print("Error: ", GetLastError()); return (0); } Gd_344 = f0_20(); Gi_408 = FALSE; Gi_424 = TRUE; } else { if (Gi_412) { Gi_380 = Gi_396; Gd_384 = NormalizeDouble(Ld_1192 * MathPow(Ld_1160, Gi_380), Li_1168); Gi_420 = f0_3(0, Gd_384, Ask, slip_Hilo, Bid, 0, 0, Gs_364 + "-" + Gi_380, MagicNumber_Hilo, 0, Lime); if (Gi_420 < 0) { Print("Error: ", GetLastError()); return (0); } Gd_336 = f0_32(); Gi_408 = FALSE; Gi_424 = TRUE; } } } if (Gi_408 && Gi_396 < 1) { ihigh_1128 = iHigh(Symbol(), 0, 1); ilow_1136 = iLow(Symbol(), 0, 2); G_bid_320 = Bid; G_ask_328 = Ask; if ((!Gi_416) && !Gi_412) { Gi_380 = Gi_396; Gd_384 = NormalizeDouble(Ld_1192 * MathPow(Ld_1160, Gi_380), Li_1168); if (ihigh_1128 > ilow_1136) { if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > 30.0) { Gi_420 = f0_3(1, Gd_384, G_bid_320, slip_Hilo, G_bid_320, 0, 0, Gs_364 + "-" + Gi_380, MagicNumber_Hilo, 0, HotPink); if (Gi_420 < 0) { Print("Error: ", GetLastError()); return (0); } Gd_336 = f0_32(); Gi_424 = TRUE; } } else { if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < 70.0) { Gi_420 = f0_3(0, Gd_384, G_ask_328, slip_Hilo, G_ask_328, 0, 0, Gs_364 + "-" + Gi_380, MagicNumber_Hilo, 0, Lime); if (Gi_420 < 0) { Print("Error: ", GetLastError()); return (0); } Gd_344 = f0_20(); Gi_424 = TRUE; } } if (Gi_420 > 0) Gi_376 = TimeCurrent() + 60.0 * (60.0 * Gd_224); Gi_408 = FALSE; } } Gi_396 = f0_4(); G_price_312 = 0; double Ld_1208 = 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_Hilo) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { G_price_312 += OrderOpenPrice() * OrderLots(); Ld_1208 += OrderLots(); } } } if (Gi_396 > 0) G_price_312 = NormalizeDouble(G_price_312 / Ld_1208, Digits); if (Gi_424) { 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_Hilo) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_BUY) { G_price_280 = G_price_312 + Ld_1172 * Point; Gd_unused_296 = G_price_280; Gd_400 = G_price_312 - G_pips_236 * Point; Gi_360 = TRUE; } } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) { if (OrderType() == OP_SELL) { G_price_280 = G_price_312 - Ld_1172 * Point; Gd_unused_304 = G_price_280; Gd_400 = G_price_312 + G_pips_236 * Point; Gi_360 = TRUE; } } } } if (Gi_424) { if (Gi_360 == TRUE) { 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_Hilo) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_Hilo) OrderModify(OrderTicket(), G_price_312, OrderStopLoss(), G_price_280, 0, Yellow); Gi_424 = FALSE; } } }
      Последний раз редактировалось villi311; 09.08.2015, 19:54.

      Комментарий

      X