KORUMA!!! YARDIM. 4 saat 45 dakika kaldı! - sayfa 2

 
pavivas :

Kim yardımcı olabilir. Hatanın nerede olduğunu bilmiyorum. testi geçemez.

kod:

//+------------------------------------------- --------------------+
//| Cempionat2012.mq5 |
//| Victor Pavlyuk |
//| |
//+------------------------------------------- --------------------+
# mülkiyet telif hakkı "Victor Pavljuk"
#özellik sürümü "1.03"

girdi int TakeProfit=538;
giriş int StopLoss=1000;
giriş int TradeTime=13;
giriş int t1=7;
giriş int t2=1;
girdi int delta=70;
çift lot=5 girin;
...

makine ne yazıyor neden çalışmıyor?
 

bu sadece satmak ile

iş satın al

satışı kaldır, satın alma ile ilgili sorunlar başlar

MQL5'i yeni anlamaya başlıyorum.

Katıldığınız için hepinize teşekkür ederim.

 
pavivas :

bu sadece satmak ile

iş satın al

satışı kaldır, satın alma ile ilgili sorunlar başlar

MQL5'i yeni anlamaya başlıyorum.

Katıldığınız için hepinize teşekkür ederim.

Pavel Smirnov'un danışmanı alınmış gibi görünüyor.

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

Bununla şaka yapmıyorsun!

 

yani kod açık

sistemim için değiştir

 
Belki hala ORDER_FILLING_RETURN yerine ORDER_FILLING_FOK kullanın.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
sınanmış
 
pavivas :

Test sırasında günlükte mesajlar üretir.

2012.09.21 20:07:11 Çekirdek 1 2012.09.18 13:00:00 1.30657 sl'de 5.00 EURUSD anında satış başarısız oldu: 1.29657 tp: 1.31195 [Geçersiz istek]

Ve neden dur ve kar yanlış yöne yerleştirildi?
 
AM2 :

Pavel Smirnov'un danışmanı alınmış gibi görünüyor.

O öyle. Satır satır, bire bir kontrol edildi.
 

O kadar çok cevap var ki, herkesin kodu okuyup görmesi/test etmesi gerekiyor - Allah korusun zamana sığmıyor, yorumlarla ne geliyor =)

 
Zeleniy :

O kadar çok cevap var ki, herkesin kodu okuması ve incelemesi/test etmesi gerekiyor - zamana uymaması garantilidir =)

Yalnızca artıyı eksiye ve eksiyi artıya değiştirmek için zamanınız olacak