Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1815 1...180818091810181118121813181418151816181718181819182018211822...2747 Новый комментарий Tretyakov Rostyslav 2021.12.15 11:34 #18141 Alexander Avksentyev #: Извини за назойливость. Это не назойливость. Никогда не бойся говорить что ты что-то не знаешь - всегда спрашивай.Я сейчас накидаю пример. Tretyakov Rostyslav 2021.12.15 11:42 #18142 Alexander Avksentyev #: Что такое "iTrailStart" и "iTrailDist"? Alexander Avksentyev 2021.12.15 11:44 #18143 Tretyakov Rostyslav #: Что такое "iTrailStart" и "iTrailDist"? Кол-во пунктов для включения и расстояние от рынка до тсл iTrailStart = 10; //Кол-во пунктов для включения тралa; iTrailDist = 10; //Расстояние от стопа до рынка; Если ордер в плюсе на 11п, тогда 11-10=1п без убытка. Tretyakov Rostyslav 2021.12.15 12:02 #18144 Alexander Avksentyev #: Кол-во пунктов для включения и расстояние от рынка до тсл Как-то так //--- input parameters int iTrailStart = 10; //Кол-во пунктов для включения тралa int iTrailDist = 10; //Расстояние от стопа до рынка //--- global parameters int iDistTrail = iTrailDist; //+------------------------------------------------------------------+ void OnTick() { //--- if(iDistTrail<MarketInfo(Symbol(),MODE_STOPLEVEL)) iDistTrail = MarketInfo(Symbol(),MODE_STOPLEVEL); // дальше твой код } //+------------------------------------------------------------------+ void TrailSL() { if(iTrailStart <= 0) return; double sl_lev; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { if ((OrderStopLoss() == 0 && Bid > OrderOpenPrice() + iTrailStart * _Point)||(OrderStopLoss() != 0 && Bid > OrderStopLoss() + (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Bid - iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } if(OrderType() == OP_SELL) { if ((OrderStopLoss() == 0 && Ask < OrderOpenPrice() - iTrailStart * _Point)||(OrderStopLoss() != 0 && Ask < OrderStopLoss() - (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Ask + iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } } } } } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.12.15 12:14 #18145 Подскажите для этих констант есть ENUM или свой писать надо? Константа Значение Описание DRAW_LINE 0 Простая линия DRAW_SECTION 1 Отрезки между непустыми значениями линии DRAW_HISTOGRAM 2 Гистограмма DRAW_ARROW 3 Стрелки (символы) DRAW_ZIGZAG 4 Отрезки между непустыми значениями чётной и нечётной линий (зигзаг), 2 DRAW_NONE 12 Отсутствие какого-либо рисования Выпущен MetaTrader 4 Client Индикаторы: Stochastic-X8.4 Пропуски баров на графике Alexey Viktorov 2021.12.15 12:25 #18146 Tretyakov Rostyslav #: Подскажите для этих констант есть ENUM или свой писать надо? Константа Значение Описание DRAW_LINE 0 Простая линия DRAW_SECTION 1 Отрезки между непустыми значениями линии DRAW_HISTOGRAM 2 Гистограмма DRAW_ARROW 3 Стрелки (символы) DRAW_ZIGZAG 4 Отрезки между непустыми значениями чётной и нечётной линий (зигзаг), 2 DRAW_NONE 12 Отсутствие какого-либо рисования Стили рисования ENUM_DRAW_TYPE звиняйте в mql4 такого нету… Tretyakov Rostyslav 2021.12.15 12:30 #18147 Alexey Viktorov #: Стили рисования ENUM_DRAW_TYPE звиняйте в mql4 такого нету… Спасибо, буду свой писать) Alexander Avksentyev 2021.12.15 14:23 #18148 Tretyakov Rostyslav #: Как-то так Спасибо, буду копать дальше,разбираться. Alexander Avksentyev 2021.12.15 15:11 #18149 Tretyakov Rostyslav #: Как-то так int Login = 4950287; datetime time = D'2022.01.01 00:00:00'; string name = "Test"; datetime time1 = 0; double TP, lastlot, minlot; int Forder; int TakeProfit,TrailStart,TrailDist,TrailStep,TrailTakeProfit,Step,Slippage; double level_count=0; int iDistTrail = iTrailDist; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //Torder-Цена открытия первого ордера //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(AccountNumber() != Login) { int close = MessageBox("Неверный номер счёта","Ошибка",MB_OK|MB_ICONSTOP); return(INIT_FAILED); }else (AccountNumber() == Login); { int close = MessageBox("Проверка прошла успешно.Экcперт может приступить к работе.","Инициализация",MB_OK|MB_ICONEXCLAMATION); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// if (TimeCurrent() > time) { int close = MessageBox("Время работы закончилось!!!","Время работы",MB_OK|MB_ICONSTOP); return(INIT_FAILED); }else(TimeCurrent() < time); { int close = MessageBox("Проверка времени работы прошла успешно.Эксперт может приступить к работе!","Время работы",MB_OK|MB_ICONEXCLAMATION); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// TakeProfit =iTakeProfit; TrailStart =iTrailStart; TrailDist =iTrailDist; TrailStep =iTrailStep; TrailTakeProfit =iTrailTakeProfit; Step =iStep; Slippage =iSlippage; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// if(Digits == 3 || Digits == 5) { TakeProfit *=10; TrailStart *=10; TrailDist *=10; TrailStep *=10; TrailTakeProfit *=10; Step *=10; Slippage *=10; } return(INIT_SUCCEEDED); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// /* Comment( "\n", name, "\n", " ", Symbol(), "\n", "Тайм Фрейм ", Period(), "\n", AccountCompany(), "\n", "\n ", AccountServer(), "\n", "Lots\n", B_S_Lot(), "\n", "Price ", Bid, "\n", "Дата ", TimeToString( TimeCurrent(), TIME_DATE ), "\n", "Server Time ", TimeToString( TimeCurrent(), TIME_SECONDS ), "\n", "Profit ", Profit(), "\n", "AvTP ", CalcTP (), "\n", "Количество ордеров ", CountTrades(), "\n", "\n ", GetVolumeLotLastOrder(), "\n", "\n", "Процент просадки ", NormalizeDouble( (AccountInfoDouble(ACCOUNT_BALANCE)-AccountInfoDouble(ACCOUNT_MARGIN_FREE))/AccountInfoDouble(ACCOUNT_BALANCE)*100,2) );*/ //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// double body = Close[1] - Open[1]; if (CountTrades() == 0 && body > 0) BuyOpen(); // Если нет открытых и сигнал бай if (CountTrades() == 0 && body < 0) SellOpen(); // Если нет открытых и сигнал селл if (CountTrades(0) > 0 && body > 0) BuyOpen(); // Если есть открытые бай и сигнал бай if (CountTrades(1) > 0 && body < 0) SellOpen(); // Если есть открытые селл и сигнал селл /* if (iTrailStart<MarketInfo(Symbol(),MODE_STOPLEVEL)) iTrailStart= MarketInfo(Symbol(), MODE_STOPLEVEL * Point); iTrailSL(); */ if(iDistTrail<MarketInfo(Symbol(),MODE_STOPLEVEL)) iDistTrail = MarketInfo(Symbol(),MODE_STOPLEVEL); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void BuyOpen() //Открытие позиции Buy { Forder = (OrderSend(_Symbol,OP_BUY,Lot,Ask,iSlippage,0,0,"Коммент",Magic,0,Blue)); if(Forder > 0) { Print("Открыта Позиция BUY"); if(OrderSelect(Forder, SELECT_BY_TICKET)) { TP = NormalizeDouble((Ask+iTakeProfit*_Point),_Digits); if (OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0)) Print("Ордер Модифицирован BUY "); else Print("Ошибка Модификации Ордера BUY = ",GetLastError()); } } else Print("Ошибка Открытия Позиции BUY"); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void SellOpen() //Открытие позиции Sell { Forder = (OrderSend(_Symbol,OP_SELL,Lot,Bid,iSlippage,0,0,"Коммент Sell",Magic,0,Red)); if (Forder > 0) { Print("Открыта Позиция SELL"); if(OrderSelect(Forder, SELECT_BY_TICKET)) { TP = NormalizeDouble((Bid-iTakeProfit*_Point),_Digits); if (OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0)) Print("Ордер Модифицирован SELL "); else Print("Ошибка Модификации Ордера SELL = ",GetLastError()); } } else Print("Ошибка Открытия Позиции SELL"); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Tester function | //+------------------------------------------------------------------+ double OnTester() { //--- double ret=0.0; //--- //--- return(ret); } //+------------------------------------------------------------------+ //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Подсчёт эквити | //+------------------------------------------------------------------+ double Profit(){double count=0; for (int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic) count+=OrderProfit(); count+=OrderSwap(); } } return(NormalizeDouble(count, 2)); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void TrailSL() { if(iTrailStart <= 0) return; double sl_lev; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { if ((OrderStopLoss() == 0 && Bid > OrderOpenPrice() + iTrailStart * _Point)||(OrderStopLoss() != 0 && Bid > OrderStopLoss() + (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Bid - iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } if(OrderType() == OP_SELL) { if ((OrderStopLoss() == 0 && Ask < OrderOpenPrice() - iTrailStart * _Point)||(OrderStopLoss() != 0 && Ask < OrderStopLoss() - (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Ask + iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } } } } } //+------------------------------------------------------------------+ Вот код, может я что не правильно указываю, но эффекта нет. Tretyakov Rostyslav 2021.12.15 15:38 #18150 Alexander Avksentyev #: Вот код, может я что не правильно указываю, но эффекта нет. А что в журнале? Выложи весь код, прикрепи файлом. 1...180818091810181118121813181418151816181718181819182018211822...2747 Новый комментарий
Извини за назойливость.
Это не назойливость. Никогда не бойся говорить что ты что-то не знаешь - всегда спрашивай.
Я сейчас накидаю пример.Что такое "iTrailStart" и "iTrailDist"?
Что такое "iTrailStart" и "iTrailDist"?
Кол-во пунктов для включения и расстояние от рынка до тсл
iTrailStart = 10; //Кол-во пунктов для включения тралa;
iTrailDist = 10; //Расстояние от стопа до рынка;
Если ордер в плюсе на 11п, тогда 11-10=1п без убытка.
Кол-во пунктов для включения и расстояние от рынка до тсл
Как-то так
Подскажите для этих констант есть ENUM или свой писать надо?
Константа
Значение
Описание
DRAW_LINE
0
Простая линия
DRAW_SECTION
1
Отрезки между непустыми значениями линии
DRAW_HISTOGRAM
2
Гистограмма
DRAW_ARROW
3
Стрелки (символы)
DRAW_ZIGZAG
4
Отрезки между непустыми значениями чётной и нечётной линий (зигзаг), 2
DRAW_NONE
12
Отсутствие какого-либо рисования
Подскажите для этих констант есть ENUM или свой писать надо?
Константа
Значение
Описание
DRAW_LINE
0
Простая линия
DRAW_SECTION
1
Отрезки между непустыми значениями линии
DRAW_HISTOGRAM
2
Гистограмма
DRAW_ARROW
3
Стрелки (символы)
DRAW_ZIGZAG
4
Отрезки между непустыми значениями чётной и нечётной линий (зигзаг), 2
DRAW_NONE
12
Отсутствие какого-либо рисования
ENUM_DRAW_TYPE
Стили рисования
ENUM_DRAW_TYPE
Как-то так
Спасибо, буду копать дальше,разбираться.
Как-то так
Вот код, может я что не правильно указываю, но эффекта нет.
Вот код, может я что не правильно указываю, но эффекта нет.
А что в журнале?
Выложи весь код, прикрепи файлом.