Такой подойдёт?
int StopLoss() // Функция изменения стопов у открытых ордеров { string Symb=Symbol(); // Финанс. инструмент for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер { if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий { // Анализ ордеров: int Tip=OrderType(); // Тип ордера if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер double SL=OrderStopLoss(); // SL выбранного орд. //------------------------------------------------------ 3 -- while(true) // Цикл модификации { double TS=Tral_Stop; // Исходное значение int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист if (TS < Min_Dist) // Если меньше допуст. TS=Min_Dist; // Новое значение TS //--------------------------------------------------- 4 -- bool Modify=false; // Не назначен к модифи switch(Tip) // По типу ордера { case 0 : // Ордер Buy if (NormalizeDouble(SL,Digits)< // Если ниже желаем. NormalizeDouble(Bid-TS*Point,Digits)) { SL=Bid-TS*Point; // то модифицируем его string Text="Buy "; // Текст для Buy Modify=true; // Назначен к модифи. } break; // Выход из switch case 1 : // Ордер Sell if (NormalizeDouble(SL,Digits)> // Если выше желаем. NormalizeDouble(Ask+TS*Point,Digits) || NormalizeDouble(SL,Digits)==0)//или равно нулю { SL=Ask+TS*Point; // то модифицируем его Text="Sell "; // Текст для Sell Modify=true; // Назначен к модифи. } } // Конец switch if (Modify==false) // Если его не модифи break; // Выход из while //--------------------------------------------------- 5 -- double TP =OrderTakeProfit(); // TP выбранного орд. double Price =OrderOpenPrice(); // Цена выбранн. орд. int Ticket=OrderTicket(); // Номер выбранн. орд. //Alert ("Модификация ",Text,Ticket,". Ждём ответ.."); bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его! //--------------------------------------------------- 6 -- if (Ans==true) // Получилось :) { //Alert ("Ордер ",Text,Ticket," модифицирован:)"); break; // Из цикла модифи. } //--------------------------------------------------- 7 -- int Error=GetLastError(); // Не получилось :( switch(Error) // Преодолимые ошибки { case 130:Alert("Неправильные стопы. Пробуем ещё раз."); RefreshRates(); // Обновим данные continue; // На след. итерацию case 136:Alert("Нет цен. Ждём новый тик.."); while(RefreshRates()==false) // До нового тика Sleep(1); // Задержка в цикле continue; // На след. итерацию case 146:Alert("Подсистема торгов занята.Пробуем ещё"); Sleep(500); // Простое решение RefreshRates(); // Обновим данные continue; // На след. итерацию // Критические ошибки case 2 : Alert("Общая ошибка."); break; // Выход из switch case 5 : Alert("Старая версия клиентского терминала."); break; // Выход из switch case 64: Alert("Счет заблокирован."); break; // Выход из switch case 133:Alert("Торговля запрещена"); break; // Выход из switch default: Alert("Возникла ошибка ",Error);//Др. ошибки } break; // Из цикла модифи. } // Конец цикла модифи. //------------------------------------------------------ 8 -- } // Конец анализа орд. } // Конец перебора орд. //--------------------------------------------------------------- 9 -- } //+------------------------------------------------------------------+
26994:
Помогите! Как в этот код можно вставить трал по ATR из https://www.mql5.com/ru/code/7108 ???
А то иникаторов полно, а тралинга нет и нет...
Разберитесь с работой ф-ий - самим не составит труда "вставить"...
Вставьте перед, например, "-------------Стоимость ордеров-----------" саму функцию (по ссылке)
//-----------------------------Трейлинг по ATR ордеров-------------------------- 6.6 -- TrailingByATR (Ticket, ATR_TF, ATR_Period1, ATR_shift1, ATR_Period2, ATR_shift2, ATR_coeff, trlinloss); //-----------------------------Стоимость ордеров---------------------------------- 7 --
И во внешние настройки советника добавьте настройки по трейлингу:
extern string Setup_TrailATR = "----------------- Traiiling ATR -----------------"; extern int ATR_TF = 0; // Таймфрейм ATR extern int ATR_Period1 = 5; // период первого ATR (больше 0; может быть равен atr2_period, но лучше отличен от последнего, почему - см. выше); extern int ATR_shift1 = 2; // для первого ATR сдвиг "окна" (неотрицательное целое число); extern int ATR_Period2 = 9; // период второго ATR (больше 0); extern int ATR_shift2 = 2; // для второго ATR сдвиг "окна", (неотрицательное целое число); extern double ATR_coeff = 0.5; // extern bool trlinloss = true; // указатель того, следует ли передвигать стоплосс на "лоссовом" участке
Ну, и, конечно, не забудьте в код советника добавить код самой функции трейлинга.
Спасибо!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Помогите! Как в этот код можно вставить трал по ATR из https://www.mql5.com/ru/code/7108 ???
А то иникаторов полно, а тралинга нет и нет...