10016 | TRADE_RETCODE_INVALID_STOPS | Неправильные стопы в запросе |
И сразу по стилю написания: располагайте функции в общепринятом порядке, а также пользуйтесь стилизатором кода.
Вот так будет красивее:
//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" input double Profit=25.0; input double StopLos=30.0; input double Spred=5.0; input double Lot=1.0; input int Slip=3;//проскальзывание //--- double Ask; double Bid; bool cantrade=true;//флаг для разрешения торговли //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { Print("Минимальный отступ в пунктах от текущей цены закрытия для установки Stop ордеров =", SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OpenLong() { MqlTradeRequest my_trade={0}; MqlTradeResult my_trade_result={0}; my_trade.action=TRADE_ACTION_DEAL; my_trade.symbol=Symbol(); my_trade.volume=NormalizeDouble(Lot,1); my_trade.price=NormalizeDouble(Ask,_Digits); my_trade.sl=NormalizeDouble(Bid-50*Point(),Digits()); my_trade.tp=NormalizeDouble(Ask+50*Point(),Digits()); my_trade.deviation=Slip; my_trade.type=ORDER_TYPE_BUY;//ПОКУПАЕМ my_trade.type_filling=ORDER_FILLING_FOK; ResetLastError(); if(OrderSend(my_trade,my_trade_result)) { Print("Код результата операции- ",my_trade_result.retcode); } else { Print("Код результата операции - ",my_trade_result.retcode); Print("Ошибка открытия ордера - ",GetLastError()); } return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { datetime dt; //время для сделок dt=TimeCurrent();//время поступления котировки Print(dt); MqlTick last_tick; SymbolInfoTick(Symbol(),last_tick); Ask=last_tick.ask; Bid=last_tick.bid; if(cantrade==true) { OpenLong(); } cantrade=false; //Print("Ask - ",Ask, Bid); } //+------------------------------------------------------------------+
Обратите внимание на функцию OnInit(). А также всегда смотрите на обе цены: Bid и Ask - вдруг Вы тестируете на периоде, когда огромный спред.
10016 | TRADE_RETCODE_INVALID_STOPS | Неправильные стопы в запросе |
И сразу по стилю написания: располагайте функции в общепринятом порядке, а также пользуйтесь стилизатором кода.
Вот так будет красивее:
Обратите внимание на функцию OnInit(). А также всегда смотрите на обе цены: Bid и Ask - вдруг Вы тестируете на периоде, когда огромный спред.
Спасибо, заработало. Теперь другая ошибка
2016.02.27 16:49:51.138 2016.02.24 09:00:00 Код результата операции - 10019 2016.02.27 16:49:51.138 2016.02.24 09:00:00 not enough money [market buy 1.00 USDRUB sl: 76.50610 tp: 76.53710] 2016.02.27 16:49:51.138 new. account state: Assets: 0.00, Liabilities: 0.00, Equity 10000.00, Margin: 300000.00, FreeMargin: -290000.00 2016.02.27 16:49:51.138 prev. account state: Balance: 10000.00, Credit: 0.00, Commission: 0.00, Accumulated: 0.00, Assets: 0.00, Liabilities: 0.00, Equity 10000.00, Margin: 0.00, FreeMargin: 10000.00
10019 | TRADE_RETCODE_NO_MONEY | Нет достаточных денежных средств для выполнения запроса |
Т.е. если у меня на демосчете 10000 USD, а я хочу купить, то нужно сначала продать? А еще объясните пож чем отличается Ask от Bid. В учебнике это текущая цена. Что за цена открытия, закрытия, текущая, на одной свече или что то другое имеется ввиду?
Спасибо, заработало. Теперь другая ошибка
10019 | TRADE_RETCODE_NO_MONEY | Нет достаточных денежных средств для выполнения запроса |
Т.е. если у меня на демосчете 10000 USD, а я хочу купить, то нужно сначала продать?
Добрый день. Опять вопрос. Мне нужно, чтобы советник после закрытия позиции 10 минут покурил, затем снова начал искать точку входа. Это сделать с помощью функции sleep? Если да, то куда ее ставить, в тело OnTick?
подскажите пожайлуста. могу ли я как то деньги со счета mql5 перевести на торговый счет???????
ИМХО, лучше записать время закрытия в глобальную переменную и проверять в OnTick >Т+10. Только делать не по реалтайм, а по свече.
Вот, что я придумал, но не уверен что правильно ( Мне нужно, чтобы советник после закрытия позиции 6 минут покурил, затем снова начал искать точку входа. Это сделать с помощью функции sleep? Если да, то куда ее ставить, в тело OnTick? .) Привожу кусок кода вставленный в тело OnTick. Изначально флаг poz описан в глобальных переменных как true. Далее выставляется ордер и флаг poz переключается в false. Затем (последнее условие в коде), каждый тик проверяется отсутствие открытых позиций, когда такой момент настает, значит сделка закрылась и идет выдержка времени sleep 6 минут, после чего poz переводится в true и разрешает советнику торговать. Компилятор ошибок не дает, но сомнения остаются т.к. OnTick выполняется каждый тик, а внутри него 6 минут!? Посмотрите пожалуйста и наставьте на путь истинный, заранее спасибо.
if(cenamin1<cenamin3-Dob && cenamin1<cenamax4-Dob && fl2==true && poz==true) { // есть ли в данный момент открытая позиция на продажу? if(!Sell_opened && !Buy_opened) { //Alert("Уже есть позиция на продажу или покупку!!!"); //return; // не добавлять к открытой позиции на продажу OpenShort(); //fl2=false; poz=false; // Sleep(6000000); } // ObjectCreate(0,"HLine1",OBJ_HLINE,0,0,0); } if(poz==false) { if(!Sell_opened && !Buy_opened) { Sleep(6000000); poz=true; } } }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день. Тренируюсь с советником. Для начала хочу научить его просто тупо входить в сделку, не получается. По коду, на первой свечке должна произойти покупка, а по факту вот такое сообщение в журнале (мусор убрал, только ошибки). Испытываю в тестере. Может проблема в том, что не идут реальные торги, сегодня выходной, хотя ведь тестер? Напротив входных переменных нужно ставить галочки, пробовал с ними и без? Может быть тестеру нужен номер демосчета ?
2016.02.27 15:32:57 History nothing to analyze 2016.02.27 15:52:18.859 2016.02.24 09:10:00 2016.02.24 09:10:00 2016.02.27 15:52:18.855 2016.02.24 09:00:00 Ошибка открытия ордера - 4756 2016.02.27 15:52:18.855 2016.02.24 09:00:00 Код результата операции - 10016 2016.02.27 15:52:18.855 2016.02.24 09:00:00 failed market buy 1.00 USDRUB sl: 76.53645 tp: 76.53685 [Invalid stops]
Посмотрите пожалуйста код, но по моему ошибок нет т.к. и мой код и код сгенерированный мастером при исполнении в тесте встает в такую же ошибку.
Вот код.
10016
TRADE_RETCODE_INVALID_STOPS
Неправильные стопы в запросе