KARAUL!!! HELP. 4 hours and 45 minutes to go!!! - page 2

 
pavivas:

Can anyone please help. I don't know where the error is.

code:

//+------------------------------------------------------------------+
//| Cempionat2012.mq5 |
//| Victor Pavlyuk |
//| |
//+------------------------------------------------------------------+
#property copyright "Victor Pavljuk"
#property version "1.03"

input int TakeProfit=538;
input int StopLoss=1000;
input int TradeTime=13;
input int t1=7;
input int t2=1;
input int delta=70;
input double lot=5;
...

What does the machine say, why doesn't it go through?
 

this only works with sell

buy works

Take away the sell and the problems start with the buy.

I'm just starting to learnMQL5.

Thank you all for your participation.

 
pavivas:

this only works with sell

buy works

Take sell away and problems with buy appear.

I'm just starting to learnMQL5.

Thank you all for your participation.

I have a feeling that Pavel Smirnov's Expert Advisor has been taken.

//+------------------------------------------------------------------+
//|                                          20_200_pips_MQL5_v1.mq5 |
//|                                    Copyright 2010, Смирнов Павел |
//|                                          http://www.autoforex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, Смирнов Павел"
#property link      "http://www.autoforex.ru"
#property version   "1.00"
//--- объявляем внешние переменные. 
//--- они будут доступны извне и их значения можно будет менять перед запуском тестера
input int      TakeProfit=200;
input int      StopLoss=2000;
input int      TradeTime=18;
input int      t1=7;
input int      t2=2;
input int      delta=70;
input double   lot=0.1;

bool cantrade=true; // флаг для разрешения или запрета торговли.
double Ask;         // здесь будем хранить цену Ask для нового тика (так удобней)
double Bid;         // здесь будем хранить цену Bid для нового тика (так удобней)
//+------------------------------------------------------------------+
//| Функция открытия длинной (Long) позиции.                         |
//| Указываем также значения переменных по умолчанию                 |
//+------------------------------------------------------------------+
int OpenLong(double volume=0.1,
             int slippage=10,
             string comment="EUR/USD 20 pips expert (Long)",
             int magic=0)
  {
//--- объявляем структуру типа MqlTradeRequest для формирования запроса
   MqlTradeRequest my_trade;
//--- в этой структуре будет ответ сервера на запрос.
   MqlTradeResult my_trade_result;
   
   ZeroMemory(my_trade);
//---- далее заполняеем все НЕОБХОДИМЫЕ поля структуры запроса.
//---- установить торговый ордер на немедленное совершение сделки с указанными параметрами (поставить рыночный ордер)
   my_trade.action=TRADE_ACTION_DEAL;
//--- указываем в качестве валютной пары - текущую валютную пару (ту, на которой запущен советник)
   my_trade.symbol=Symbol();
//--- размер лота
   my_trade.volume=NormalizeDouble(volume,1);
//--- цена, при достижении которой ордер должен быть исполнен. 
//--- в нашем случае для TRADE_ACTION_DEAL это текущая цена и ее, согласно инструкции указывать не обязательно.
   my_trade.price=NormalizeDouble(Ask,_Digits);
//--- стоплосс ордера (цена при которой следует закрыть убыточную сделку)
   my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits);
//--- тейкпрофит (цена при которой следует закрыть прибыльную сделку)
   my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
//--- проскальзывание в пунктах (при тестировании особой роли не играет, т.к. проскальзывания не бывает на тестах)
   my_trade.deviation=slippage;
//--- тип рыночного ордера (покупаем)
   my_trade.type=ORDER_TYPE_BUY;
//--- указываем как исполнять ордер. (All Or Nothing - все или ничего) 
//--- сделка может быть совершена исключительно в указанном объеме и по цене равной или лучше указанной в ордере.
   my_trade.type_filling=ORDER_FILLING_FOK;
//--- комментарий ордера
   my_trade.comment=comment;
//--- магическое число ордера
   my_trade.magic=magic;

//--- обнуляем код последней ошибки 
   ResetLastError();

//--- отправляем запрос на открытие позиции. При этом проверяем успешно ли прошла отправка запроса
   if(OrderSend(my_trade,my_trade_result))
     {
      //--- если сервер принял ордер то смортрим на результат 
      Print("Код результата операции - ",my_trade_result.retcode);
     }
   else
     {
      //--- сервер не принял ордер в нем есть ошибки, выводим их в журнал
      Print("Код результата операции - ",my_trade_result.retcode);
      Print("Ошибка открытия ордера = ",GetLastError());
     }
//--- выходим из функции открытия ордера     
   return(0);
  }
//+------------------------------------------------------------------+
//| функция открытия короткой (Short) позиции.                       |
//| Аналогична функции открытия длинной позиции.                     |
//+------------------------------------------------------------------+
int OpenShort(double volume=0.1,
              int slippage=10,
              string comment="EUR/USD 20 pips expert (Short)",
              int magic=0)
  {
   MqlTradeRequest my_trade;
   MqlTradeResult my_trade_result;
   ZeroMemory(my_trade);
   my_trade.action=TRADE_ACTION_DEAL;
   my_trade.symbol=Symbol();
   my_trade.volume=NormalizeDouble(volume,1);
   my_trade.price=NormalizeDouble(Bid,_Digits);
   my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits);
   my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
   my_trade.deviation=slippage;
   my_trade.type=ORDER_TYPE_SELL;
   my_trade.type_filling=ORDER_FILLING_FOK;
   my_trade.comment=comment;
   my_trade.magic=magic;

   ResetLastError();
   if(OrderSend(my_trade,my_trade_result))
     {
      Print("Код результата операции - ",my_trade_result.retcode);
     }
   else
     {
      Print("Код результата операции - ",my_trade_result.retcode);
      Print("Ошибка открытия ордера = ",GetLastError());
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){}
//+------------------------------------------------------------------+
//| Expert OnTick function                                           |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- массив где будут храниться цены открытия баров (включая Open[t1] и Open[t2])
   double Open[];
//--- в этой структуре храним текущее время.
   MqlDateTime mqldt;
//--- обновляем данные о текущем времени.
   TimeCurrent(mqldt);
//--- переменная определяющая длину массива Open[].
   int len;
//---здесь будут храниться цены последнего пришедшего тика
   MqlTick last_tick;
//--- заполняем структуру last_tick последними ценами текущего символа.
   SymbolInfoTick(_Symbol,last_tick);
//--- обновляем переменные Ask и Bid для дальнейшего использования
   Ask=last_tick.ask;
   Bid=last_tick.bid;

//---для удобства работы определяем массив Open[] как таймсерию.
   ArraySetAsSeries(Open,true);

//--- далее определим длину массива такую, чтобы обязательно вошли значения Open[t1] и Open[t2]
//--- t1 и t2 - номера баров на которых сравниваются цены. 
//--- Берем большее из них и добавляем 1 (т.к. есть еще и нулевой бар)
   if(t1>=t2)len=t1+1;
   else len=t2+1;

//--- заполняем массив Open[] актуальными значениями
   CopyOpen(_Symbol,PERIOD_H1,0,len,Open);

//--- переключаем флаг cantarde на true, т.е. разрешим советнику снова открывать позиции
   if(((mqldt.hour)>TradeTime)) cantrade=true;

//--- проверяем возможность встать в позицию:
   if(!PositionSelect(_Symbol))// Если еще нет открытой позиции
     {
      //--- если пришло время торговать
      if((mqldt.hour==TradeTime) && (cantrade))
        {
         //--- проверяем условие для открытия короткой сделки (продажи)
         if(Open[t1]>(Open[t2]+delta*_Point))
           {
            //--- открываем позицию Short 
            OpenShort(lot,10,"EUR/USD 20 pips expert (Short)",1234);
            //--- переключаем флаг (запрещаем торговать), чтобы не открывал больше позиций до следующего дня
            cantrade=false;
            //--- выходим
            return;
           }
         //--- проверяем условие для открытия длинной позиции (покупки)
         if((Open[t1]+delta*_Point)<Open[t2])
           {
            //--- открываем позицию Long
            OpenLong(lot,10,"EUR/USD 20 pips expert (Long)",1234);
            //--- переключаем флаг (запрещаем торговать), чтобы не открывал больше позиций до следующего дня
            cantrade=false;
            //--- выходим
            return;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

You should not joke about it!

 

so the code is open.

I am modifying it to suit my system

 
Maybe use ORDER_FILLING_FOK instead of ORDER_FILLING_RETURN after all.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
tried
 
pavivas:

During the test, I see messages in the log.

2012.09.21 20:07:11 Core 1 2012.09.18 13:00:00 failed instant sell 5.00 EURUSD at 1.30657 sl: 1.29657 tp: 1.31195 [Invalid request]

Why are stop and profit on the wrong side?
 
AM2:

It feels like Councillor Pavel Smirnov has been taken.

That's the one. I cross-referenced it line by line, one to one.
 

So many answers, need to read and review each one\test the code - god forbid I don't have the time, what's it coming to with the comments =)

 
Zeleniy:

So many answers, you have to read and review each one and test the code - guaranteed he won't meet the time limit =)

He'll only be able to change plus for minus and minus for plus