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"//--- объявляем внешние переменные. //--- они будут доступны извне и их значения можно будет менять перед запуском тестераinputint TakeProfit= 200 ;
inputint StopLoss= 2000 ;
inputint TradeTime= 18 ;
inputint t1= 7 ;
inputint t2= 2 ;
inputint delta= 70 ;
inputdouble 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 |//+------------------------------------------------------------------+intOnInit ()
{
return ( 0 );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason){}
//+------------------------------------------------------------------+//| Expert OnTick function |//+------------------------------------------------------------------+voidOnTick ()
{
//--- массив где будут храниться цены открытия баров (включая 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 ;
}
//+------------------------------------------------------------------+
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;
...
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.
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.
Bununla şaka yapmıyorsun!
yani kod açık
sistemim için değiştir
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]
Pavel Smirnov'un danışmanı alınmış gibi görünüyor.
O kadar çok cevap var ki, herkesin kodu okuyup görmesi/test etmesi gerekiyor - Allah korusun zamana sığmıyor, yorumlarla ne geliyor =)
O kadar çok cevap var ki, herkesin kodu okuması ve incelemesi/test etmesi gerekiyor - zamana uymaması garantilidir =)