Модифицируем код советника.

У Илана есть одна неприятная особенность: во время флета (бокового движения графика), он может открывать ордера, через 5-3-2 и даже один пункт движения графика. Из за этого иногда за ночь может наоткрывать 3-5 ордеров через пару пунктов, что нам категорически противопоказано. Как это исправить…Я не нашел другого способа, как поменять код советника. Открываем советник в редакторе (правой кнопкой -> «Изменить»). Находим 63 строчку, которая выглядит так » if (PipStep>DefaultPips*DEL) PipStep = NormalizeDouble(DefaultPips*DEL,0); // if dynamic pips fail, assign pips extreme value», после этой строки вставляем следующее:

if (PipStep<10) PipStep = PipStep+10;  

После этих манипуляций, минимальное колено будет не менее 11 пунктов. Если хотите поменять это значение, поставьте свое вместо последней десятки. Затем скомпилируйте советника заново (кнопка F5) и тестируйте. Если все в порядке, можно торговать. Рекомендую сделать две версии советника, один оригинальный, другой измененный и скопировать их под разными именами, чтобы удобно было переключаться.

Закладка постоянная ссылка.

7 Responses to Модифицируем код советника.

  1. Васиф говорит:

    Прошу прощения вот код советника на котором установлен значения if (PipStep<10) PipStep = PipStep+10;

    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    #property copyright ""
    #property link ""
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    double Stoploss = 500.0; // уровень безубытка
    double TrailStart = 10.0;
    double TrailStop = 10.0;
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    extern double LotExponent = 1.4; // на сколько умножать лот при выставлении следующего колена. пример: первый лот 0.1, серия: 0.16, 0.26, 0.43 …
    extern bool DynamicPips = true;
    extern int DefaultPips = 12;
    extern int Glubina = 24;
    extern int DEL = 3;
    extern double slip = 3.0; // на сколько может отличаться цена в случае если ДЦ запросит реквоты (в последний момент немного поменяет цену)
    extern double Lots = 0.1; // разер лота для начала торгов
    extern int lotdecimal = 1; // сколько знаков после запятой в лоте рассчитывать 0 — нормальные лоты (1), 1 — минилоты (0.1), 2 — микро (0.01)
    extern double TakeProfit = 10.0; // по достижении скольких пунктов прибыли закрывать сделку
    //extern double PipStep = 30.0; // шаг между выставление новых колен
    extern double Drop = 500;
    extern double RsiMinimum = 30.0; // нижняя граница RSI
    extern double RsiMaximum = 70.0; // верхняя граница RSI
    extern int MagicNumber = 2222; // волшебное число (помогает советнику отличить свои ставки от чужих)
    int PipStep=0;
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    extern int MaxTrades = 10; // максимально количество одновременно открытых ордеров
    extern bool UseEquityStop = FALSE;
    extern double TotalEquityRisk = 20.0;
    extern bool UseTrailingStop = FALSE;
    extern bool UseTimeOut = FALSE; // использовать таймаут (закрывать сделки если они "висят" слишком долго)
    extern double MaxTradeOpenHours = 48.0; // время таймаута сделок в часах (через сколько закрывать зависшие сделки)
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    double PriceTarget, StartEquity, BuyTarget, SellTarget;
    double AveragePrice, SellLimit, BuyLimit;
    double LastBuyPrice, LastSellPrice, Spread;
    bool flag;
    string EAName="Ilan1.6";
    int timeprev = 0, expiration;
    int NumOfTrades = 0;
    double iLots;
    int cnt = 0, total;
    double Stopper = 0.0;
    bool TradeNow = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
    int ticket;
    bool NewOrdersPlaced = FALSE;
    double AccountEquityHighAmt, PrevEquity;
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    int init() {
    Spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
    return (0);
    }

    int deinit() {
    return (0);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    int start()
    {
    if (DynamicPips) {
    double hival=High[iHighest(NULL,0,MODE_HIGH,Glubina,1)]; // calculate highest and lowest price from last bar to 24 bars ago
    double loval=Low[iLowest(NULL,0,MODE_LOW,Glubina,1)]; // chart used for symbol and time period
    PipStep=NormalizeDouble((hival-loval)/DEL/Point,0); // calculate pips for spread between orders
    if (PipStepDefaultPips*DEL) PipStep = NormalizeDouble(DefaultPips*DEL,0); // if dynamic pips fail, assign pips extreme value
    if (PipStepDrop && ShortTrade)||(iCCI(NULL,15,55,0,0)<(-Drop) && LongTrade)) {

    CloseThisSymbolAll();
    Print("Closed All due to TimeOut");

    }
    if (timeprev == Time[0]) return (0);
    timeprev = Time[0];

    double CurrentPairProfit = CalculateProfit();
    if (UseEquityStop) {
    if (CurrentPairProfit TotalEquityRisk / 100.0 * AccountEquityHigh()) {
    CloseThisSymbolAll();
    Print(«Closed All due to Stop Out»);
    NewOrdersPlaced = FALSE;
    }
    }
    total = CountTrades();
    if (total == 0) flag = FALSE;
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    LongTrade = TRUE;
    ShortTrade = FALSE;
    break;
    }
    }
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_SELL) {
    LongTrade = FALSE;
    ShortTrade = TRUE;
    break;
    }
    }
    }
    if (total > 0 && total = PipStep * Point) TradeNow = TRUE;
    if (ShortTrade && Bid — LastSellPrice >= PipStep * Point) TradeNow = TRUE;
    }
    if (total < 1) {
    ShortTrade = FALSE;
    LongTrade = FALSE;
    TradeNow = TRUE;
    StartEquity = AccountEquity();
    }
    if (TradeNow) {
    LastBuyPrice = FindLastBuyPrice();
    LastSellPrice = FindLastSellPrice();
    if (ShortTrade) {
    NumOfTrades = total;
    iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
    RefreshRates();
    ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTrades + "-" + PipStep, MagicNumber, 0, HotPink);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastSellPrice = FindLastSellPrice();
    TradeNow = FALSE;
    NewOrdersPlaced = TRUE;
    } else {
    if (LongTrade) {
    NumOfTrades = total;
    iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
    ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTrades + "-" + PipStep, MagicNumber, 0, Lime);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastBuyPrice = FindLastBuyPrice();
    TradeNow = FALSE;
    NewOrdersPlaced = TRUE;
    }
    }
    }
    if (TradeNow && total CurrCl) {
    if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > RsiMinimum ) {
    ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + «-» + NumOfTrades, MagicNumber, 0, HotPink);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastBuyPrice = FindLastBuyPrice();
    NewOrdersPlaced = TRUE;
    }
    } else {
    if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < RsiMaximum ) {
    ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
    if (ticket 0) expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
    TradeNow = FALSE;
    }
    }
    total = CountTrades();
    AveragePrice = 0;
    double Count = 0;
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
    AveragePrice += OrderOpenPrice() * OrderLots();
    Count += OrderLots();
    }
    }
    }
    if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
    if (NewOrdersPlaced) {
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    PriceTarget = AveragePrice + TakeProfit * Point;
    BuyTarget = PriceTarget;
    Stopper = AveragePrice — Stoploss * Point;
    flag = TRUE;
    }
    }
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_SELL) {
    PriceTarget = AveragePrice — TakeProfit * Point;
    SellTarget = PriceTarget;
    Stopper = AveragePrice + Stoploss * Point;
    flag = TRUE;
    }
    }
    }
    }
    if (NewOrdersPlaced) {
    if (flag == TRUE) {
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(), NormalizeDouble(AveragePrice,Digits), NormalizeDouble(OrderStopLoss(),Digits), NormalizeDouble(PriceTarget,Digits), 0, Yellow);
    NewOrdersPlaced = FALSE;
    }
    }
    }
    return (0);
    }
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    int CountTrades() {
    int count = 0;
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
    if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
    }
    return (count);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    void CloseThisSymbolAll() {
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) {
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
    if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
    }
    Sleep(1000);
    }
    }
    }

    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    int OpenPendingOrder(int pType, double pLots, double pLevel, int sp, double pr, int sl, int tp, string pComment, int pMagic, int pDatetime, color pColor) {
    int ticket = 0;
    int err = 0;
    int c = 0;
    int NumberOfTries = 100;
    switch (pType) {
    case 2:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_BUYLIMIT, pLots, pLevel, sp, StopLong(pr, sl), TakeLong(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(1000);
    }
    break;
    case 4:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_BUYSTOP, pLots, pLevel, sp, StopLong(pr, sl), TakeLong(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 0:
    for (c = 0; c < NumberOfTries; c++) {
    RefreshRates();
    ticket = OrderSend(Symbol(), OP_BUY, pLots, NormalizeDouble(Ask,Digits), sp, NormalizeDouble(StopLong(Bid, sl),Digits), NormalizeDouble(TakeLong(Ask, tp),Digits), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 3:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_SELLLIMIT, pLots, pLevel, sp, StopShort(pr, sl), TakeShort(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 5:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_SELLSTOP, pLots, pLevel, sp, StopShort(pr, sl), TakeShort(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 1:
    for (c = 0; c = 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
    if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit += OrderProfit();
    }
    return (Profit);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    void TrailingAlls(int pType, int stop, double AvgPrice) {
    int profit;
    double stoptrade;
    double stopcal;
    if (stop != 0) {
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) {
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    profit = NormalizeDouble((Bid — AvgPrice) / Point, 0);
    if (profit stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Aqua);
    }
    if (OrderType() == OP_SELL) {
    profit = NormalizeDouble((AvgPrice — Ask) / Point, 0);
    if (profit < pType) continue;
    stoptrade = OrderStopLoss();
    stopcal = Ask + stop * Point;
    if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Red);
    }
    }
    Sleep(1000);
    }
    }
    }
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    double AccountEquityHigh() {
    if (CountTrades() == 0) AccountEquityHighAmt = AccountEquity();
    if (AccountEquityHighAmt = 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
    oldticketnumber = OrderTicket();
    if (oldticketnumber > ticketnumber) {
    oldorderopenprice = OrderOpenPrice();
    unused = oldorderopenprice;
    ticketnumber = oldticketnumber;
    }
    }
    }
    return (oldorderopenprice);
    }

    double FindLastSellPrice() {
    double oldorderopenprice;
    int oldticketnumber;
    double unused = 0;
    int ticketnumber = 0;
    for (int cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
    oldticketnumber = OrderTicket();
    if (oldticketnumber > ticketnumber) {
    oldorderopenprice = OrderOpenPrice();
    unused = oldorderopenprice;
    ticketnumber = oldticketnumber;
    }
    }
    }
    return (oldorderopenprice);
    }
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

  2. Васиф говорит:

    Здравствуйте я все сделал как вы сказали но сегодня заметил что советник открыл 12 ордеров через 1 2 пункта в чем еще причина может быть вот код советника, я переделал как вы сказали выше.

    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    #property copyright «»
    #property link «»
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    double Stoploss = 500.0; // уровень безубытка
    double TrailStart = 10.0;
    double TrailStop = 10.0;
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    extern double LotExponent = 1.4; // на сколько умножать лот при выставлении следующего колена. пример: первый лот 0.1, серия: 0.16, 0.26, 0.43 …
    extern bool DynamicPips = true;
    extern int DefaultPips = 12;
    extern int Glubina = 24;
    extern int DEL = 3;
    extern double slip = 3.0; // на сколько может отличаться цена в случае если ДЦ запросит реквоты (в последний момент немного поменяет цену)
    extern double Lots = 0.1; // разер лота для начала торгов
    extern int lotdecimal = 1; // сколько знаков после запятой в лоте рассчитывать 0 — нормальные лоты (1), 1 — минилоты (0.1), 2 — микро (0.01)
    extern double TakeProfit = 10.0; // по достижении скольких пунктов прибыли закрывать сделку
    extern double PipStep = 30.0; // шаг между выставление новых колен
    extern double Drop = 500;
    extern double RsiMinimum = 30.0; // нижняя граница RSI
    extern double RsiMaximum = 70.0; // верхняя граница RSI
    extern int MagicNumber = 2222; // волшебное число (помогает советнику отличить свои ставки от чужих)
    int PipStep=0;
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    extern int MaxTrades = 10; // максимально количество одновременно открытых ордеров
    extern bool UseEquityStop = FALSE;
    extern double TotalEquityRisk = 20.0;
    extern bool UseTrailingStop = FALSE;
    extern bool UseTimeOut = FALSE; // использовать таймаут (закрывать сделки если они «висят» слишком долго)
    extern double MaxTradeOpenHours = 48.0; // время таймаута сделок в часах (через сколько закрывать зависшие сделки)
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    double PriceTarget, StartEquity, BuyTarget, SellTarget;
    double AveragePrice, SellLimit, BuyLimit;
    double LastBuyPrice, LastSellPrice, Spread;
    bool flag;
    string EAName=»Ilan1.6″;
    int timeprev = 0, expiration;
    int NumOfTrades = 0;
    double iLots;
    int cnt = 0, total;
    double Stopper = 0.0;
    bool TradeNow = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
    int ticket;
    bool NewOrdersPlaced = FALSE;
    double AccountEquityHighAmt, PrevEquity;
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    int init() {
    Spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
    return (0);
    }

    int deinit() {
    return (0);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    int start()
    {
    if (DynamicPips) {
    double hival=High[iHighest(NULL,0,MODE_HIGH,Glubina,1)]; // calculate highest and lowest price from last bar to 24 bars ago
    double loval=Low[iLowest(NULL,0,MODE_LOW,Glubina,1)]; // chart used for symbol and time period
    PipStep=NormalizeDouble((hival-loval)/DEL/Point,0); // calculate pips for spread between orders
    if (PipStepDefaultPips*DEL) PipStep = NormalizeDouble(DefaultPips*DEL,0); // if dynamic pips fail, assign pips extreme value
    }// else PipStep = DefaultPips;
    //double filtr_MA = iMA(NULL,60,60,0,0,0,0);

    double PrevCl;
    double CurrCl;
    if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice);
    if ((iCCI(NULL,15,55,0,0)>Drop && ShortTrade)||(iCCI(NULL,15,55,0,0)<(-Drop) && LongTrade)) {

    CloseThisSymbolAll();
    Print("Closed All due to TimeOut");

    }
    if (timeprev == Time[0]) return (0);
    timeprev = Time[0];

    double CurrentPairProfit = CalculateProfit();
    if (UseEquityStop) {
    if (CurrentPairProfit TotalEquityRisk / 100.0 * AccountEquityHigh()) {
    CloseThisSymbolAll();
    Print(«Closed All due to Stop Out»);
    NewOrdersPlaced = FALSE;
    }
    }
    total = CountTrades();
    if (total == 0) flag = FALSE;
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    LongTrade = TRUE;
    ShortTrade = FALSE;
    break;
    }
    }
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_SELL) {
    LongTrade = FALSE;
    ShortTrade = TRUE;
    break;
    }
    }
    }
    if (total > 0 && total = PipStep * Point) TradeNow = TRUE;
    if (ShortTrade && Bid — LastSellPrice >= PipStep * Point) TradeNow = TRUE;
    }
    if (total < 1) {
    ShortTrade = FALSE;
    LongTrade = FALSE;
    TradeNow = TRUE;
    StartEquity = AccountEquity();
    }
    if (TradeNow) {
    LastBuyPrice = FindLastBuyPrice();
    LastSellPrice = FindLastSellPrice();
    if (ShortTrade) {
    NumOfTrades = total;
    iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
    RefreshRates();
    ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTrades + "-" + PipStep, MagicNumber, 0, HotPink);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastSellPrice = FindLastSellPrice();
    TradeNow = FALSE;
    NewOrdersPlaced = TRUE;
    } else {
    if (LongTrade) {
    NumOfTrades = total;
    iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
    ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTrades + "-" + PipStep, MagicNumber, 0, Lime);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastBuyPrice = FindLastBuyPrice();
    TradeNow = FALSE;
    NewOrdersPlaced = TRUE;
    }
    }
    }
    if (TradeNow && total CurrCl) {
    if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > RsiMinimum ) {
    ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + «-» + NumOfTrades, MagicNumber, 0, HotPink);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastBuyPrice = FindLastBuyPrice();
    NewOrdersPlaced = TRUE;
    }
    } else {
    if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < RsiMaximum ) {
    ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
    if (ticket 0) expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
    TradeNow = FALSE;
    }
    }
    total = CountTrades();
    AveragePrice = 0;
    double Count = 0;
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
    AveragePrice += OrderOpenPrice() * OrderLots();
    Count += OrderLots();
    }
    }
    }
    if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
    if (NewOrdersPlaced) {
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    PriceTarget = AveragePrice + TakeProfit * Point;
    BuyTarget = PriceTarget;
    Stopper = AveragePrice — Stoploss * Point;
    flag = TRUE;
    }
    }
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_SELL) {
    PriceTarget = AveragePrice — TakeProfit * Point;
    SellTarget = PriceTarget;
    Stopper = AveragePrice + Stoploss * Point;
    flag = TRUE;
    }
    }
    }
    }
    if (NewOrdersPlaced) {
    if (flag == TRUE) {
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(), NormalizeDouble(AveragePrice,Digits), NormalizeDouble(OrderStopLoss(),Digits), NormalizeDouble(PriceTarget,Digits), 0, Yellow);
    NewOrdersPlaced = FALSE;
    }
    }
    }
    return (0);
    }
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    int CountTrades() {
    int count = 0;
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
    if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
    }
    return (count);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    void CloseThisSymbolAll() {
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) {
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
    if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
    }
    Sleep(1000);
    }
    }
    }

    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    int OpenPendingOrder(int pType, double pLots, double pLevel, int sp, double pr, int sl, int tp, string pComment, int pMagic, int pDatetime, color pColor) {
    int ticket = 0;
    int err = 0;
    int c = 0;
    int NumberOfTries = 100;
    switch (pType) {
    case 2:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_BUYLIMIT, pLots, pLevel, sp, StopLong(pr, sl), TakeLong(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(1000);
    }
    break;
    case 4:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_BUYSTOP, pLots, pLevel, sp, StopLong(pr, sl), TakeLong(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 0:
    for (c = 0; c < NumberOfTries; c++) {
    RefreshRates();
    ticket = OrderSend(Symbol(), OP_BUY, pLots, NormalizeDouble(Ask,Digits), sp, NormalizeDouble(StopLong(Bid, sl),Digits), NormalizeDouble(TakeLong(Ask, tp),Digits), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 3:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_SELLLIMIT, pLots, pLevel, sp, StopShort(pr, sl), TakeShort(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 5:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_SELLSTOP, pLots, pLevel, sp, StopShort(pr, sl), TakeShort(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 1:
    for (c = 0; c = 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
    if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit += OrderProfit();
    }
    return (Profit);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    void TrailingAlls(int pType, int stop, double AvgPrice) {
    int profit;
    double stoptrade;
    double stopcal;
    if (stop != 0) {
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) {
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    profit = NormalizeDouble((Bid — AvgPrice) / Point, 0);
    if (profit stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Aqua);
    }
    if (OrderType() == OP_SELL) {
    profit = NormalizeDouble((AvgPrice — Ask) / Point, 0);
    if (profit < pType) continue;
    stoptrade = OrderStopLoss();
    stopcal = Ask + stop * Point;
    if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Red);
    }
    }
    Sleep(1000);
    }
    }
    }
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    double AccountEquityHigh() {
    if (CountTrades() == 0) AccountEquityHighAmt = AccountEquity();
    if (AccountEquityHighAmt = 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
    oldticketnumber = OrderTicket();
    if (oldticketnumber > ticketnumber) {
    oldorderopenprice = OrderOpenPrice();
    unused = oldorderopenprice;
    ticketnumber = oldticketnumber;
    }
    }
    }
    return (oldorderopenprice);
    }

    double FindLastSellPrice() {
    double oldorderopenprice;
    int oldticketnumber;
    double unused = 0;
    int ticketnumber = 0;
    for (int cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
    oldticketnumber = OrderTicket();
    if (oldticketnumber > ticketnumber) {
    oldorderopenprice = OrderOpenPrice();
    unused = oldorderopenprice;
    ticketnumber = oldticketnumber;
    }
    }
    }
    return (oldorderopenprice);
    }
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    #property copyright «»
    #property link «»
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    double Stoploss = 500.0; // уровень безубытка
    double TrailStart = 10.0;
    double TrailStop = 10.0;
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    extern double LotExponent = 1.4; // на сколько умножать лот при выставлении следующего колена. пример: первый лот 0.1, серия: 0.16, 0.26, 0.43 …
    extern bool DynamicPips = true;
    extern int DefaultPips = 12;
    extern int Glubina = 24;
    extern int DEL = 3;
    extern double slip = 3.0; // на сколько может отличаться цена в случае если ДЦ запросит реквоты (в последний момент немного поменяет цену)
    extern double Lots = 0.1; // разер лота для начала торгов
    extern int lotdecimal = 1; // сколько знаков после запятой в лоте рассчитывать 0 — нормальные лоты (1), 1 — минилоты (0.1), 2 — микро (0.01)
    extern double TakeProfit = 10.0; // по достижении скольких пунктов прибыли закрывать сделку
    extern double PipStep = 30.0; // шаг между выставление новых колен
    extern double Drop = 500;
    extern double RsiMinimum = 30.0; // нижняя граница RSI
    extern double RsiMaximum = 70.0; // верхняя граница RSI
    extern int MagicNumber = 2222; // волшебное число (помогает советнику отличить свои ставки от чужих)
    int PipStep=0;
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    extern int MaxTrades = 10; // максимально количество одновременно открытых ордеров
    extern bool UseEquityStop = FALSE;
    extern double TotalEquityRisk = 20.0;
    extern bool UseTrailingStop = FALSE;
    extern bool UseTimeOut = FALSE; // использовать таймаут (закрывать сделки если они «висят» слишком долго)
    extern double MaxTradeOpenHours = 48.0; // время таймаута сделок в часах (через сколько закрывать зависшие сделки)
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    double PriceTarget, StartEquity, BuyTarget, SellTarget;
    double AveragePrice, SellLimit, BuyLimit;
    double LastBuyPrice, LastSellPrice, Spread;
    bool flag;
    string EAName=»Ilan1.6″;
    int timeprev = 0, expiration;
    int NumOfTrades = 0;
    double iLots;
    int cnt = 0, total;
    double Stopper = 0.0;
    bool TradeNow = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
    int ticket;
    bool NewOrdersPlaced = FALSE;
    double AccountEquityHighAmt, PrevEquity;
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    int init() {
    Spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
    return (0);
    }

    int deinit() {
    return (0);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    int start()
    {
    if (DynamicPips) {
    double hival=High[iHighest(NULL,0,MODE_HIGH,Glubina,1)]; // calculate highest and lowest price from last bar to 24 bars ago
    double loval=Low[iLowest(NULL,0,MODE_LOW,Glubina,1)]; // chart used for symbol and time period
    PipStep=NormalizeDouble((hival-loval)/DEL/Point,0); // calculate pips for spread between orders
    if (PipStepDefaultPips*DEL) PipStep = NormalizeDouble(DefaultPips*DEL,0); // if dynamic pips fail, assign pips extreme value
    }// else PipStep = DefaultPips;
    //double filtr_MA = iMA(NULL,60,60,0,0,0,0);

    double PrevCl;
    double CurrCl;
    if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice);
    if ((iCCI(NULL,15,55,0,0)>Drop && ShortTrade)||(iCCI(NULL,15,55,0,0)<(-Drop) && LongTrade)) {

    CloseThisSymbolAll();
    Print("Closed All due to TimeOut");

    }
    if (timeprev == Time[0]) return (0);
    timeprev = Time[0];

    double CurrentPairProfit = CalculateProfit();
    if (UseEquityStop) {
    if (CurrentPairProfit TotalEquityRisk / 100.0 * AccountEquityHigh()) {
    CloseThisSymbolAll();
    Print(«Closed All due to Stop Out»);
    NewOrdersPlaced = FALSE;
    }
    }
    total = CountTrades();
    if (total == 0) flag = FALSE;
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    LongTrade = TRUE;
    ShortTrade = FALSE;
    break;
    }
    }
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_SELL) {
    LongTrade = FALSE;
    ShortTrade = TRUE;
    break;
    }
    }
    }
    if (total > 0 && total = PipStep * Point) TradeNow = TRUE;
    if (ShortTrade && Bid — LastSellPrice >= PipStep * Point) TradeNow = TRUE;
    }
    if (total < 1) {
    ShortTrade = FALSE;
    LongTrade = FALSE;
    TradeNow = TRUE;
    StartEquity = AccountEquity();
    }
    if (TradeNow) {
    LastBuyPrice = FindLastBuyPrice();
    LastSellPrice = FindLastSellPrice();
    if (ShortTrade) {
    NumOfTrades = total;
    iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
    RefreshRates();
    ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTrades + "-" + PipStep, MagicNumber, 0, HotPink);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastSellPrice = FindLastSellPrice();
    TradeNow = FALSE;
    NewOrdersPlaced = TRUE;
    } else {
    if (LongTrade) {
    NumOfTrades = total;
    iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal);
    ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTrades + "-" + PipStep, MagicNumber, 0, Lime);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastBuyPrice = FindLastBuyPrice();
    TradeNow = FALSE;
    NewOrdersPlaced = TRUE;
    }
    }
    }
    if (TradeNow && total CurrCl) {
    if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > RsiMinimum ) {
    ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + «-» + NumOfTrades, MagicNumber, 0, HotPink);
    if (ticket < 0) {
    Print("Error: ", GetLastError());
    return (0);
    }
    LastBuyPrice = FindLastBuyPrice();
    NewOrdersPlaced = TRUE;
    }
    } else {
    if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < RsiMaximum ) {
    ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
    if (ticket 0) expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
    TradeNow = FALSE;
    }
    }
    total = CountTrades();
    AveragePrice = 0;
    double Count = 0;
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
    AveragePrice += OrderOpenPrice() * OrderLots();
    Count += OrderLots();
    }
    }
    }
    if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits);
    if (NewOrdersPlaced) {
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    PriceTarget = AveragePrice + TakeProfit * Point;
    BuyTarget = PriceTarget;
    Stopper = AveragePrice — Stoploss * Point;
    flag = TRUE;
    }
    }
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_SELL) {
    PriceTarget = AveragePrice — TakeProfit * Point;
    SellTarget = PriceTarget;
    Stopper = AveragePrice + Stoploss * Point;
    flag = TRUE;
    }
    }
    }
    }
    if (NewOrdersPlaced) {
    if (flag == TRUE) {
    for (cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(), NormalizeDouble(AveragePrice,Digits), NormalizeDouble(OrderStopLoss(),Digits), NormalizeDouble(PriceTarget,Digits), 0, Yellow);
    NewOrdersPlaced = FALSE;
    }
    }
    }
    return (0);
    }
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    int CountTrades() {
    int count = 0;
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
    if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
    }
    return (count);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    void CloseThisSymbolAll() {
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) {
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
    if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
    }
    Sleep(1000);
    }
    }
    }

    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    int OpenPendingOrder(int pType, double pLots, double pLevel, int sp, double pr, int sl, int tp, string pComment, int pMagic, int pDatetime, color pColor) {
    int ticket = 0;
    int err = 0;
    int c = 0;
    int NumberOfTries = 100;
    switch (pType) {
    case 2:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_BUYLIMIT, pLots, pLevel, sp, StopLong(pr, sl), TakeLong(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(1000);
    }
    break;
    case 4:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_BUYSTOP, pLots, pLevel, sp, StopLong(pr, sl), TakeLong(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 0:
    for (c = 0; c < NumberOfTries; c++) {
    RefreshRates();
    ticket = OrderSend(Symbol(), OP_BUY, pLots, NormalizeDouble(Ask,Digits), sp, NormalizeDouble(StopLong(Bid, sl),Digits), NormalizeDouble(TakeLong(Ask, tp),Digits), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 3:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_SELLLIMIT, pLots, pLevel, sp, StopShort(pr, sl), TakeShort(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 5:
    for (c = 0; c < NumberOfTries; c++) {
    ticket = OrderSend(Symbol(), OP_SELLSTOP, pLots, pLevel, sp, StopShort(pr, sl), TakeShort(pLevel, tp), pComment, pMagic, pDatetime, pColor);
    err = GetLastError();
    if (err == 0/* NO_ERROR */) break;
    if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
    Sleep(5000);
    }
    break;
    case 1:
    for (c = 0; c = 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
    if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit += OrderProfit();
    }
    return (Profit);
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
    void TrailingAlls(int pType, int stop, double AvgPrice) {
    int profit;
    double stoptrade;
    double stopcal;
    if (stop != 0) {
    for (int trade = OrdersTotal() — 1; trade >= 0; trade—) {
    if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) {
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) {
    if (OrderType() == OP_BUY) {
    profit = NormalizeDouble((Bid — AvgPrice) / Point, 0);
    if (profit stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Aqua);
    }
    if (OrderType() == OP_SELL) {
    profit = NormalizeDouble((AvgPrice — Ask) / Point, 0);
    if (profit < pType) continue;
    stoptrade = OrderStopLoss();
    stopcal = Ask + stop * Point;
    if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Red);
    }
    }
    Sleep(1000);
    }
    }
    }
    }
    //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

    double AccountEquityHigh() {
    if (CountTrades() == 0) AccountEquityHighAmt = AccountEquity();
    if (AccountEquityHighAmt = 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
    oldticketnumber = OrderTicket();
    if (oldticketnumber > ticketnumber) {
    oldorderopenprice = OrderOpenPrice();
    unused = oldorderopenprice;
    ticketnumber = oldticketnumber;
    }
    }
    }
    return (oldorderopenprice);
    }

    double FindLastSellPrice() {
    double oldorderopenprice;
    int oldticketnumber;
    double unused = 0;
    int ticketnumber = 0;
    for (int cnt = OrdersTotal() — 1; cnt >= 0; cnt—) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
    if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
    oldticketnumber = OrderTicket();
    if (oldticketnumber > ticketnumber) {
    oldorderopenprice = OrderOpenPrice();
    unused = oldorderopenprice;
    ticketnumber = oldticketnumber;
    }
    }
    }
    return (oldorderopenprice);
    }
    //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *