Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1837 1...183018311832183318341835183618371838183918401841184218431844...2747 Новый комментарий законопослушный гражданин 2021.12.31 15:28 #18361 Tretyakov Rostyslav #: // Параметры советника input string sParametersEA = ""; // Параметры советника input double Lot = 0.01; // Количество лотов input double Lotcontrol = 0.08; // ----- input int StopLoss = 30; // Стоп (SL) input int TakeProfit = 30; // Тейк (TP) input int HourPause = 1; // Пауза в часах input int Slippage = 3; // Проскальзование (в пунктах) input int Magic = 1; // Индентификатор советника input double K_Martin1 = 0.01; // Множитель мартин 1 input double K_Martin2 = 1.9; // Множитель мартин 2 input double K_Martin3 = 1.4; // Множитель мартин 3 input int OrdersClose = 3; // Ограничение лотности мартин1 input int OrdersClose2 = 5; // Ограничение лотности мартин2 input int DigitsLot = 2; // Точность лотности // Параметры индикатора input string sParametersMA = ""; // Параметры индикатора input int PeriodMA = 14; // Период мувинга input int MovingShift = 1; // Сдвиг мувинга // Глобальные переменные datetime Start=0,newbar; double dMA; double MaxMartinLot; double MaxMartinLot2; //+-----------------------------------------------------------------------------------------------+ int OnInit() { Start = TimeCurrent(); MaxMartinLot = Lot*MathPow(1.4,OrdersClose); MaxMartinLot2 = Lot*MathPow(K_Martin2,OrdersClose2); int Y = 15; DrawLABEL("nextlot",1,5,Y,clrLime,""); Y += 20; DrawLABEL("currentlot",1,5,Y,clrLime,""); Y += 30; return(INIT_SUCCEEDED); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+-----------------------------------------------------------------------------------------------+ void OnTick() { // Получим значение индикатора dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0. // выключаем торговлю if (OrderLots()>=Lotcontrol) { Start=TimeCurrent()+(HourPause*60*60); } // Если нет открытых ордеров, то входим в условие if((CountOrders()==0)&& Start<=TimeCurrent()) { // Если появился сигнал на покупку, то откроем ордер на покупку if(bSignalBuy() == true) vOrderOpenBuy(); // Если появился сигнал на продажу, то откроем ордер на продажу if(bSignalSell() == true) vOrderOpenSell(); } // Пишем какой лот текущий и какой следующий DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2))); DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); } вроде собрал, но срабатывает в тестере только один раз если сделать еще один тест - не открывает ни одной сделки при первом тестировании интервал выставляется, но если лот сбросился на стартовый, то больше не открывает ни одной сделки. где я ошибся? Советники: MarketPredictor [ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой Эма Кросс! Alekseu Fedotov 2021.12.31 15:51 #18362 законопослушный гражданин #: вроде собрал, но срабатывает в тестере только один раз если сделать еще один тест - не открывает ни одной сделки при первом тестировании интервал выставляется, но если лот сбросился на стартовый, то больше не открывает ни одной сделки. где я ошибся? По чаще нажимаем f1 перед этим щёлкаем на функции и читаем: Ордер должен быть предварительно выбран с помощью функции OrderSelect(). Это к функции OrderLots(); Извините пьяный. С наступающим Новым Годом! Alekseu Fedotov 2021.12.31 15:56 #18363 законопослушный гражданин #: вроде собрал, но срабатывает в тестере только один раз если сделать еще один тест - не открывает ни одной сделки при первом тестировании интервал выставляется, но если лот сбросился на стартовый, то больше не открывает ни одной сделки. где я ошибся? Подарок Пробуйте данную функцию: //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает сумму лотов открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetAmountLotFromOpenPos(string sy="",int op=-1,int mn=-1) { double l=0; int i,k=OrdersTotal(); if(sy=="0") sy=Symbol(); for(i=0; i<k; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==sy || sy=="") { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(op<0 || OrderType()==op) { if(mn<0 || OrderMagicNumber()==mn) { l+=OrderLots(); } } } } } } return(l); } законопослушный гражданин 2021.12.31 16:04 #18364 Alekseu Fedotov #: Подарок Пробуйте данную функцию: Спасибо!) с Наступающим) Vladimir Simakov 2021.12.31 16:21 #18365 Andrey Sokolov #: Да. Вот сделал максимально просто, в приложении подключил, там работает. А вызываешь в mql5 в контексте TestLib? Должно быть TestLib::TestClass::Inc() Alekseu Fedotov 2021.12.31 16:35 #18366 законопослушный гражданин #: Спасибо!) с Наступающим) Обращайся, если чё! Andrei Sokolov 2021.12.31 18:35 #18367 законопослушный гражданин #: вроде собрал, но срабатывает в тестере только один раз где я ошибся? Для решения подобных проблем хорошо помогает отладчик. Рекомендую его использовать Andrei Sokolov 2021.12.31 18:35 #18368 Vladimir Simakov #: А вызываешь в mql5 в контексте TestLib? Должно быть TestLib::TestClass::Inc() Спасиб Tretyakov Rostyslav 2022.01.01 09:32 #18369 законопослушный гражданин #: вроде собрал, но срабатывает в тестере только один разгде я ошибся? // Параметры советника input string sParametersEA = ""; // Параметры советника input double Lot = 0.01; // Количество лотов input double Lotcontrol = 0.08; // ----- input int StopLoss = 30; // Стоп (SL) input int TakeProfit = 30; // Тейк (TP) input int HourPause = 1; // Пауза в часах input int Slippage = 3; // Проскальзование (в пунктах) input int Magic = 1; // Индентификатор советника input double K_Martin1 = 0.01; // Множитель мартин 1 input double K_Martin2 = 1.9; // Множитель мартин 2 input double K_Martin3 = 1.4; // Множитель мартин 3 input int OrdersClose = 3; // Ограничение лотности мартин1 input int OrdersClose2 = 5; // Ограничение лотности мартин2 input int DigitsLot = 2; // Точность лотности // Параметры индикатора input string sParametersMA = ""; // Параметры индикатора input int PeriodMA = 14; // Период мувинга input int MovingShift = 1; // Сдвиг мувинга // Глобальные переменные datetime Start=0,newbar; double dMA; double MaxMartinLot; double MaxMartinLot2; //+-----------------------------------------------------------------------------------------------+ int OnInit() { Start = TimeCurrent(); MaxMartinLot = Lot*MathPow(1.4,OrdersClose); MaxMartinLot2 = Lot*MathPow(K_Martin2,OrdersClose2); int Y = 15; DrawLABEL("nextlot",1,5,Y,clrLime,""); Y += 20; DrawLABEL("currentlot",1,5,Y,clrLime,""); Y += 30; return(INIT_SUCCEEDED); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+-----------------------------------------------------------------------------------------------+ void OnTick() { // Получим значение индикатора dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0. // выключаем торговлю if (GetInfoLastPos(1)>=Lotcontrol) { Start=GetInfoLastPos(3)+(HourPause*60*60); } // Если нет открытых ордеров, то входим в условие if((CountOrders()==0)&& Start<=TimeCurrent()) { // Если появился сигнал на покупку, то откроем ордер на покупку if(bSignalBuy() == true) vOrderOpenBuy(); // Если появился сигнал на продажу, то откроем ордер на продажу if(bSignalSell() == true) vOrderOpenSell(); } // Пишем какой лот текущий и какой следующий DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2))); DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); } //+----------------------------------------------------------------------------+ //| Функция возвращает по символу и магику | //| 1 - размер лота последней закрытой позиции | //| 2 - размер профита с учетом комиссии и свопа последней закрытой позиции | //| 3 - время последней закрытой позиции | //+----------------------------------------------------------------------------+ double GetInfoLastPos(int a=1) { datetime t=0; double result=0,l=0,p=0,f=0; int i=OrdersHistoryTotal()-1; for(int pos=i;pos>=0;pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();} } } } } if(a==1) {result=l;} else if(a==2) {result=p;} else if(a==3) {result=(double)t;} else {result=0;} return(result); } законопослушный гражданин 2022.01.01 13:24 #18370 Tretyakov Rostyslav #: Спасибо. а я GetInfoLastPos() через void прописал.... 1...183018311832183318341835183618371838183918401841184218431844...2747 Новый комментарий
вроде собрал, но срабатывает в тестере только один раз
если сделать еще один тест - не открывает ни одной сделки
при первом тестировании интервал выставляется, но если лот сбросился на стартовый, то больше не открывает ни одной сделки.
где я ошибся?
вроде собрал, но срабатывает в тестере только один раз
если сделать еще один тест - не открывает ни одной сделки
при первом тестировании интервал выставляется, но если лот сбросился на стартовый, то больше не открывает ни одной сделки.
где я ошибся?
По чаще нажимаем f1 перед этим щёлкаем на функции и читаем:
Ордер должен быть предварительно выбран с помощью функции OrderSelect().
Это к функции OrderLots();
Извините пьяный.
С наступающим Новым Годом!
вроде собрал, но срабатывает в тестере только один раз
если сделать еще один тест - не открывает ни одной сделки
при первом тестировании интервал выставляется, но если лот сбросился на стартовый, то больше не открывает ни одной сделки.
где я ошибся?
Подарок
Пробуйте данную функцию:
Подарок
Пробуйте данную функцию:
Спасибо!) с Наступающим)
Да. Вот сделал максимально просто, в приложении подключил, там работает.
Спасибо!) с Наступающим)
Обращайся, если чё!
вроде собрал, но срабатывает в тестере только один раз
где я ошибся?
Для решения подобных проблем хорошо помогает отладчик. Рекомендую его использовать
А вызываешь в mql5 в контексте TestLib? Должно быть TestLib::TestClass::Inc()
Спасиб
вроде собрал, но срабатывает в тестере только один раз
где я ошибся?Спасибо.
а я GetInfoLastPos() через void прописал....