Добрый день всем!
прошу помочь разобраться с кодом.Дает следующие ошибки и Предупреждения , надеюсь не последние....:
в этом коде:
Переменную "len" нужно инициализировать - то есть присвоить её значение, например 1 или 100 или 15 ..
"Digits" воспринимается компиляторов как неинициализированая переменная. Вместо "Digits" нужно использовать "Digits()".
Дополнение:
ошибка
return value of 'OrderSend' should be checked nur.mq5 252 7
в коде:
//+------------------------------------------------------------------+ //| Открытие длинной позиции | //+------------------------------------------------------------------+ void LongPositionOpen() { MqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросов MqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросов ZeroMemory(mrequest); ZeroMemory(mresult); double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK); // лучшее предложение на покупку double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID); // лучшее предложение на продажу if(!PositionSelect(_Symbol)) { mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение mrequest.price = NormalizeDouble(Ask,_Digits); // последняя цена ask mrequest.sl = 0; // Stop Loss mrequest.tp = 0; // Take Profit mrequest.symbol = _Symbol; // символ mrequest.volume = Lot; // количество лотов для торговли mrequest.magic = 0; // Magic Number mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего mrequest.deviation=5; // проскальзывание от текущей цены 252 OrderSend(mrequest,mresult); // отсылаем ордер } } //+------------------------------------------------------------------+
Дополнение:
ошибка
в коде:
Нужно всегда проверять результат отсылки торгового приказа.
Функция OrderSend() предназначена для совершения торговых операций через отправку запросов на торговый сервер.
bool OrderSend( MqlTradeRequest& request, // структура запроса MqlTradeResult& result // структура ответа );
Нужно всегда проверять результат отсылки торгового приказа.
Функция OrderSend() предназначена для совершения торговых операций через отправку запросов на торговый сервер.
да, я готовый блок OrderSend() взял в свободном доступе.
Дает не ошибку, но предупреждает.
да, я готовый блок OrderSend() взял в свободном доступе.
Дает не ошибку, но предупреждает.
Предупреждение - это потенциальная ошибка.
А вдруг Вы потом решите, что торговый запрос прошёл успешно и дальше начнёте "плясать" исходя из этого утверждения? А на самом деле, например из-за реквоты, торговый приказ не прошёл?Переменную "len" нужно инициализировать - то есть присвоить её значение, например 1 или 100 или 15 ..
"Digits" воспринимается компиляторов как неинициализированая переменная. Вместо "Digits" нужно использовать "Digits()".
Дополню, или вместо функции Digits() переменную _Digits
да, я готовый блок OrderSend() взял в свободном доступе.
Дает не ошибку, но предупреждает.
Точно, я всегда убираю все варнинги. И один раз это спасло меня от очень серьезной ошибки именно в работе робота.
А часто присылают код с 50-ю варнингами, типа, - да ерунда, компилятор сделали слишком строгим.
//================================================================================================================= double Ask = SymbolInfoDouble(Symbol1,SYMBOL_ASK); // лучшее предложение на покупку double Bid = SymbolInfoDouble(Symbol1,SYMBOL_BID); // лучшее предложение на продажу //--- объявляем переменные типа boolean, они будут использоваться при проверке условий для покупки и продажи // bool Buy_Condition =(rsiVal[1]<lw && mrate[1].close < BBLow[1] ); // DEMA растет bool Buy_Condition=(vSignal_1>0); bool Sell_Condition=(vSignal_2>0); bool Buy_Close=(vSignal_2>0); bool Sell_Close=(vSignal_1>0); // if(vSignal_1=1) Buy_Condition=true; // CTrade trade; // trade.PositionOpen("EURUSD",ORDER_TYPE_SELL,1, SymbolInfoDouble("EURUSD",ORDER_TYPE_SELL==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),0,0); // trade.PositionOpen("GBPUSD",ORDER_TYPE_SELL,1, SymbolInfoDouble("GBPUSD",ORDER_TYPE_SELL==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK),0,0); if(Buy_Condition && !PositionSelect(Symbol1)) // Открываем длинную позицию { // LongPositionOpen(); } if(Sell_Condition && !PositionSelect(Symbol1)) // Открываем короткую позицию { ShortPositionOpen(); } if(Buy_Close && PositionSelect(Symbol1)) // Закрываем длинную позицию { // LongPositionClose(); } if(Sell_Close && PositionSelect(Symbol1)) // Закрываем короткую позицию { // ShortPositionClose(); } return; } //bbb //+------------------------------------------------------------------+ //| Открытие длинной позиции | //+------------------------------------------------------------------+ void LongPositionOpen() { MqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросов MqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросов ZeroMemory(mrequest); ZeroMemory(mresult); double Ask = SymbolInfoDouble(Symbol1,SYMBOL_ASK); // лучшее предложение на покупку double Bid = SymbolInfoDouble(Symbol1,SYMBOL_BID); // лучшее предложение на продажу if(!PositionSelect(Symbol1)) { mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение mrequest.price = NormalizeDouble(Ask,_Digits); // последняя цена ask mrequest.sl = 0; // Stop Loss mrequest.tp = 0; // Take Profit mrequest.symbol = Symbol1; // символ // mrequest.symbol = S[I]; // символs // r.symbol=S[I]; // string S[3]={"EURUSD","EURGBP","GBPUSD"}; //SymbolPosition A[3]={PBuy,PSell,PSell}; // What is action for each symbol //SymbolPosition SPos[3]; // What is position for each symbol . ==> MUST BE a HAMMILTON settings ! mrequest.volume = Lot; // количество лотов для торговли mrequest.magic = 0; // Magic Number mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего mrequest.deviation=5; // проскальзывание от текущей цены OrderSend(mrequest,mresult); // OrderSend(MqlTradeRequest request,MqlTradeResult result); // отсылаем ордер // bool OrderSend( MqlTradeRequest& request,// структура запроса MqlTradeResult& result // структура ответа ); } } //+------------------------------------------------------------------+ //| Открытие короткой позиции | //+------------------------------------------------------------------+ void ShortPositionOpen() { MqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросов MqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросов ZeroMemory(mrequest); ZeroMemory(mresult); double Ask = SymbolInfoDouble(Symbol1,SYMBOL_ASK); // лучшее предложение на покупку double Bid = SymbolInfoDouble(Symbol1,SYMBOL_BID); // лучшее предложение на продажу if(!PositionSelect(_Symbol)) { mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение mrequest.price = NormalizeDouble(Bid,_Digits); // последняя цена Bid mrequest.sl = 0; // Stop Loss mrequest.tp = 0; // Take Profit mrequest.symbol = Symbol1; // символ mrequest.volume = Lot; // количество лотов для торговли mrequest.magic = 0; // Magic Number mrequest.type= ORDER_TYPE_SELL; // ордер на продажу mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего mrequest.deviation=5; // проскальзывание от текущей цены OrderSend(mrequest,mresult); // отсылаем ордер } } //+------------------------------------------------------------------+ //| Закрытие длинной позиции | //+------------------------------------------------------------------+ void LongPositionClose() { MqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросов MqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросов ZeroMemory(mrequest); ZeroMemory(mresult); double Ask = SymbolInfoDouble(Symbol1,SYMBOL_ASK); // лучшее предложение на покупку double Bid = SymbolInfoDouble(Symbol1,SYMBOL_BID); // лучшее предложение на продажу if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение mrequest.price = NormalizeDouble(Bid,_Digits); // последняя цена Bid mrequest.sl = 0; // Stop Loss mrequest.tp = 0; // Take Profit mrequest.symbol = Symbol1; // символ mrequest.volume = Lot; // количество лотов для торговли mrequest.magic = 0; // Magic Number mrequest.type= ORDER_TYPE_SELL; // ордер на продажу mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего mrequest.deviation=5; // проскальзывание от текущей цены OrderSend(mrequest,mresult); // отсылаем ордер } } //+------------------------------------------------------------------+ //| Закрытие короткой позиции | //+------------------------------------------------------------------+ void ShortPositionClose() { MqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросов MqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросов ZeroMemory(mrequest); ZeroMemory(mresult); double Ask = SymbolInfoDouble(Symbol1,SYMBOL_ASK); // лучшее предложение на покупку double Bid = SymbolInfoDouble(Symbol1,SYMBOL_BID); // лучшее предложение на продажу if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) { mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение mrequest.price = NormalizeDouble(Ask,_Digits); // последняя цена ask mrequest.sl = 0; // Stop Loss mrequest.tp = 0; // Take Profit mrequest.symbol = Symbol1; // символ mrequest.volume = Lot; // количество лотов для торговли mrequest.magic = 0; // Magic Number mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего mrequest.deviation=5; // проскальзывание от текущей цены OrderSend(mrequest,mresult); // отсылаем ордер } } //+------------------------------------------------------------------+
советник все равно не работает даже на 1 паре, что неверно в этих блоках.
На другом советнике работает блок открытия и закрытия сделок.
дает предупреждения:
return value of 'OrderSend' should be checked nur.mq5 258 5
Добрый день всем!
прошу помочь разобраться с кодом.Дает следующие ошибки и Предупреждения , надеюсь не последние....:
в этом коде: -2017.09.07 09:37:04.977 array out of range in (266,37)
Ещё Вам не сказали, что массив вышел за свои рамки в 266 строке. Но эту строку Вы не показали.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день всем!
прошу помочь разобраться с кодом.Дает следующие ошибки и Предупреждения , надеюсь не последние....:
в этом коде: