extern string REM_10 = "Начальный лот"; extern double Lot = 0.01; extern string REM_20 = "Прибыль в пунктах"; extern int PP = 140; extern string REM_30 = "Шаг сетки"; extern int Step = 170; extern string REM_40 = "Максимальное кол-во ордеров"; extern int MaxTrades = 99; extern string REM_60 = "Идентификатор ордеров робота"; extern int Magic = 101; extern bool NewCikl = true; extern string REM_80 = "Открыть серию только выше:"; extern double Uroven_2 = 0; extern string REM_88 = "Открыть серию только ниже:"; extern double Uroven_1 = 0; // последние два параметра, при открытии сетки обнуляются программно. // параметр NewCikl - на старте робота должен быть true. Когда открыт хотя бы один ордер сетки - можно переключить в false, // ... в этом случае робот продолжит сопровождать уже работающую сетку, но по её завершении не откроет следующую.
Нашёл дохлое место у таких роботов - это гэпы. Гэп нарушает принцип сетки, цена уходит слишком далеко. Противоядий вижу два: ► ближе к пятнице переводить параметр NewCikl в FALSE. В этом случае робот продолжает сопровождать текущую сетку, но не откроет новую. Хотя даже и в этом случае - к концу пятницы текущая сетка вполне может и не закрыться, и соотвецтвенно попасть в понедельничный гэп. ► в пятницу отключить робота и закрыть текущую сетку по текущей цене, соотвецтвенно приняв некоторый минус от недоработавшей сетки.
//---- Поиск общего уровня, где профит/просадка равны ноль, плюсуем уровень профита...
//--- Bid_0 - цена открытия старшего ордера, Bid_K - цена открытия младшего ордера, РР - прибыль в пунктах //--- блок приемлем для сетки с постоянным лотом ордеров //--- , но сперва потребно определить значность ДЦ и задать множитель: int Y; if(Digits==4 || Digits==2) Y = 10000; if(Digits==5 || Digits==3) Y = 100000;
//--- считаем... double Sred,Slag; Sred=((Bid_K-Bid_0)*Y/2)+PP; // для сольных поз Slag=Bid_K-(Sred*Point);
//---- ... ищем свои ордера и модернизируем их: for (int M = OrdersTotal() - 1; M >= 0; M--) { OrderSelect(M, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { OrderModify(OrderTicket(),OrderOpenPrice(),SU_S,Slag,0,Yellow); } }