KARAUL!!!!あと4時間45分!!!! - ページ 2

 
pavivas:

どなたか助けてください。どこがエラーなのかわからない。

のコードで表示されます。

//+------------------------------------------------------------------+
| Cempionat2012.mq5|||||。
//| ヴィクトル・パヴリウク
//| |
//+------------------------------------------------------------------+
#property copyright"Victor Pavljuk"
#property version "1.03"

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

機械が何を言っているのか、なぜ通じないのか?
 

これは売り物にしか使えない

買い付け作品

売りを取れば、問題は買いから始まる。

MQL5を 学び始めたところです。

皆様、ご参加ありがとうございました。

 
pavivas:

これは売り物にしか使えない

買い付け作品

売りを取れば、買いの問題が出てくる。

MQL5を 学び始めたところです。

皆様、ご参加ありがとうございました。

Pavel SmirnovのExpert Advisorが取られているような気がします。

//+------------------------------------------------------------------+
//|                                          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;
  }
//+------------------------------------------------------------------+

冗談はやめてくださいよ

 

ということで、コードはオープンです。

私のシステムに合わせて改造しています

 
結局、ORDER_FILLING_RETURN の代わりに ORDER_FILLING_FOK を使うのかもしれない。
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
しけんずみ
 
pavivas:

テスト中、ログにメッセージが表示されます。

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].

なぜ、ストップとプロフィットが逆になっているのか?
 
AM2:

パヴェル・スミルノフ参議院議員を取られた感じです。

それです。1行1行、クロスリファレンスを行いました。
 

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:

多くの回答があるため、一つ一つを読んで確認し、コードをテストしなければなりません - 彼は制限時間を守れないことが保証されています =)

プラスをマイナスに、マイナスをプラスにしか変えられなくなる