Nikolay Gaylis : Test cihazında test etmek için bir sembolü nasıl seçeceğimi söyle
Mümkün değil. Ayarlarda sadece manuel olarak seçin.
Test cihazında elbette diğer karakterler için veri talep edebilirsiniz, ancak bunun için veri senkronizasyonunu sağlamak için yeterince çalışmanız gerekecek (test cihazı bunu sizin için yapmayacaktır, çünkü varsayılan olarak bir karakterle çalışır). Seçilenden farklı bir sembol üzerinde işlem yapmak genellikle imkansızdır.
Not: Bunların hepsi MT4 içindir. MT5'te durum farklıdır.
EA ,OnTimer() EventSetTimer (1) içinde çalışır.Birçok onay işaretini özlüyorum.OnTick()olayıbana uymuyor çünkü aynı anda birkaç döviz çiftini analiz ediyorum... Sleep(200) bile sistemi bir döngüde yüklüyor... Ne yapmalıyım?
Nikolay Gaylis : EA ,OnTimer() EventSetTimer(1) içinde çalışır.Bir çok tik atlıyorum.OnTick()olayıbana uymuyor çünkü aynı anda birkaç döviz çiftini analiz ediyorum... Sleep(200) bile sistemi bir döngüde yüklüyor... Ne yapmalıyım?
Ayrıca EventSetMillisecondTimer() vardır - bu şekilde OnTimer() yürütme sıklığını azaltabilirsiniz.
Tünaydın arkadaşlar! Aşağıdaki sorunu çözmeme yardım edin: Basit bir Expert Advisor yazmaya çalışıyorum ve aşağıdakilerle karşılaştım: SL değeri 0'dan farklı bir şeye ayarlanmışsa, işlemler hiç açılmaz ve TP, TStop ve TrailingStep işlevleri hiç çalışmıyor.
Kodda ne düzeltilmeli?
//+------------------------------------------------------------------+//| MA.mq4 |//| Sergey |//| http://www.mql4.com |//+------------------------------------------------------------------+#property copyright"Sergey Karev"#property link"http://www.mql4.com"#property description"Moving Average sample expert advisor"//#property strict#define MAGICMA 23101987//--- Inputsinputdouble Lots = 0.01 ; // Объем лотаinputint SL = 0 ; // Stop Lossinputint TP = 0 ; // Take profitinputint TStop = 0 ; // Пунктыinputint TrailingStep = 0 ; // Шаг TS в пунктахinputint MA_per1 = 5 ; // MA быстраяinputint MA_per2 = 55 ; // MA медленнаяinputint Timeframe = 60 ; // Таймфрейм inputdouble MaximumRisk = 0.02 ;
inputdouble DecreaseFactor = 3 ;
inputint MovingShift = 0 ; // Cдвиг среднейinputint Shift = 0 ; // Сдвиг баровinputint Magic_number = 1987 ; // Если Magic = 0, то работает + ручные ордерыbool TSProfitOnly = true ;
int NumberOfTry = 5 ;
bool UseSound = True ;
string NameFileSound = "expert.wav" ;
//+------------------------------------------------------------------+//| Calculate open positions |//+------------------------------------------------------------------+int CalculateCurrentOrders( string symbol)
{
int buys= 0 ,sells= 0 ;
//---for ( int i= 0 ;i< OrdersTotal ();i++)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGICMA)
{
if ( OrderType ()== OP_BUY ) buys++;
if ( OrderType ()== OP_SELL ) sells++;
}
}
//--- return orders volumeif (buys> 0 ) return (buys);
elsereturn (-sells);
}
//+------------------------------------------------------------------+//| Calculate optimal lot size |//+------------------------------------------------------------------+double LotsOptimized()
{
double lot=Lots;
int orders= HistoryTotal (); // history orders totalint losses= 0 ; // number of losses orders without a break//--- select lot size
lot= NormalizeDouble ( AccountFreeMargin ()*MaximumRisk/ 1000.0 , 1 );
//--- calcuulate number of losses orders without a breakif (DecreaseFactor> 0 )
{
for ( int i=orders- 1 ;i>= 0 ;i--)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )== false )
{
Print ( "Error in history!" );
break ;
}
if ( OrderSymbol ()!= Symbol () || OrderType ()> OP_SELL )
continue ;
//---if ( OrderProfit ()> 0 ) break ;
if ( OrderProfit ()< 0 ) losses++;
}
if (losses> 1 )
lot= NormalizeDouble (lot-lot*losses/DecreaseFactor, 1 );
}
//--- return lot sizeif (lot< 0.1 ) lot= 0.1 ;
return (lot);
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+void CheckForOpen()
{
double ma1;
double ma2;
int res;
//+------------------------------------------------------------------+//| Приводим SL и TP к единым целым |//+------------------------------------------------------------------+ double sl= 0 , tp= 0 ;
sl= NormalizeDouble (SL* Point (), _Digits );
tp= NormalizeDouble (TP* Point (), _Digits );
//--- go trading only for first tiks of new barif ( Volume [ 0 ]> 1 ) return ;
//--- get Moving Average
ma1= iMA ( NULL , Timeframe, MA_per1, MovingShift, MODE_SMMA , PRICE_CLOSE ,Shift);
ma2= iMA ( NULL , Timeframe, MA_per2, MovingShift, MODE_SMMA , PRICE_CLOSE ,Shift);
// имя символа, таймфрейм, период, сдвиг средней, метод усреднения, тип цены, сдвиг//--- sell conditionsif (ma1 < ma2) //[1] - номер свечи
{
res= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 ,sl,tp, "" ,MAGICMA, 0 ,Red);
return ;
}
//--- buy conditionsif (ma1 > ma2)
{
res= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 ,sl,tp, "" ,MAGICMA, 0 ,Blue);
return ;
}
//---
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+void CheckForClose()
{
double ma1;
double ma2;
//--- go trading only for first tiks of new barif ( Volume [ 0 ]> 1 ) return ;
//--- get Moving Average
ma1= iMA ( NULL ,Timeframe,MA_per1,MovingShift, MODE_SMMA , PRICE_CLOSE ,Shift);
ma2= iMA ( NULL ,Timeframe,MA_per2,MovingShift, MODE_SMMA , PRICE_CLOSE ,Shift);
//---for ( int i= 0 ;i< OrdersTotal ();i++)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
if ( OrderMagicNumber ()!=MAGICMA || OrderSymbol ()!= Symbol ()) continue ;
//--- check order type if ( OrderType ()== OP_BUY )
{
if (ma1 < ma2)
{
if (! OrderClose ( OrderTicket (), OrderLots (), Bid , 3 ,White))
Print ( "OrderClose error " , GetLastError ());
}
break ;
}
if ( OrderType ()== OP_SELL )
{
if (ma1 > ma2)
{
if (! OrderClose ( OrderTicket (), OrderLots (), Ask , 3 ,White))
Print ( "OrderClose error " , GetLastError ());
}
break ;
}
}
//---
}
//+------------------------------------------------------------------+//| OnTick function |//+------------------------------------------------------------------+voidOnTick ()
{
//--- check for history and tradingif ( Bars < 100 || IsTradeAllowed ()== false )
return ;
//--- calculate open orders by current symbolif (CalculateCurrentOrders( Symbol ())== 0 ) CheckForOpen();
else CheckForClose();
//+------------------------------------------------------------------+//| Trailing Stop / Step |//+------------------------------------------------------------------+double tr= 0 , ts= 0 , op= 0 , sl= 0 ,
ask= NormalizeDouble ( Ask , _Digits ),
bid= NormalizeDouble ( Bid , _Digits );
tr= NormalizeDouble (TStop* Point (), _Digits );
ts= NormalizeDouble (TrailingStep* Point (), _Digits ); // Приводим к единым величинам (включая центовые счета)double ma2 = iMA ( NULL ,Timeframe,MA_per2,MovingShift, MODE_SMMA , PRICE_CLOSE ,Shift);
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()== Symbol ())
{
if ( OrderMagicNumber ()==Magic_number) // Если Magic = 0, то работает + ручные ордеры
{
op= NormalizeDouble ( OrderOpenPrice (), _Digits );
sl= NormalizeDouble ( OrderStopLoss (), _Digits );
if ( OrderType ()== OP_BUY )
{
if ((bid-op)>tr)
if ((bid-sl)>tr)
if ((bid-tr)>ma2)
if ( OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble (ma2, _Digits ), OrderTakeProfit (), 0 , clrGreen )== false )
Print ( "Error BUY OrderModify" );
}
if ( OrderType ()== OP_SELL )
{
if ((op-ask)>tr)
if ((sl-ask)>tr || sl== 0 )
if ((ask+tr)<ma2)
if ( OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble (ma2, _Digits ), OrderTakeProfit (), 0 , clrGreen )== false )
Print ( "Error SELL OrderModify" );
}
}
}
}
}
}
//+----------------------------------------------------------------------+
Tünaydın arkadaşlar! Aşağıdaki sorunu çözmeme yardım edin: Basit bir Expert Advisor yazmaya çalışıyorum ve aşağıdakilerle karşılaştım: SL değeri 0'dan farklı bir şeye ayarlanmışsa, işlemler hiç açılmaz ve TP, TStop ve TrailingStep işlevleri hiç çalışmıyor.
Kodda ne düzeltilmeli?
Hatalarınızı bulmak için bir hata ayıklayıcı kullanıyor musunuz?
Test cihazında test etmek için bir sembolü nasıl seçeceğimi söyle
Mümkün değil. Ayarlarda sadece manuel olarak seçin.
Test cihazında elbette diğer karakterler için veri talep edebilirsiniz, ancak bunun için veri senkronizasyonunu sağlamak için yeterince çalışmanız gerekecek (test cihazı bunu sizin için yapmayacaktır, çünkü varsayılan olarak bir karakterle çalışır). Seçilenden farklı bir sembol üzerinde işlem yapmak genellikle imkansızdır.
Not: Bunların hepsi MT4 içindir. MT5'te durum farklıdır.
AYRILMAK YASAKTIR!
EA , OnTimer() EventSetTimer(1) içinde çalışır.Bir çok tik atlıyorum. OnTick() olayı bana uymuyor çünkü aynı anda birkaç döviz çiftini analiz ediyorum... Sleep(200) bile sistemi bir döngüde yüklüyor... Ne yapmalıyım?
Ayrıca EventSetMillisecondTimer() vardır - bu şekilde OnTimer() yürütme sıklığını azaltabilirsiniz.
Ayrıca EventSetMillisecondTimer() vardır - bu şekilde OnTimer() yürütme sıklığını azaltabilirsiniz.
Teşekkürler, deneyeceğim...
Tünaydın.
Test sırasında vurgulanan alanda "Dizi aralık dışında" mesajı görünür. Derleme yaparken hata vermiyor hatanın özü nedir ve nasıl düzeltebilirim?
double TD_Close=Kapat[1];
for (int i=2; i<=Period_bars; i++)
{
if (ABS_Yüksek<Yüksek[i]) ABS_Yüksek=Yüksek[i];
}
if (TD_Close>ABS_Yüksek)
{
if ( OrdersTotal () <= 1 && newCandle != Zaman[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp,"",magic,0);
else newCandle = Zaman[0];
}
Tünaydın.
Test sırasında vurgulanan alanda "Dizi aralık dışında" mesajı görünür. Derleme yaparken hata vermiyor hatanın özü nedir ve nasıl düzeltebilirim?
double TD_Close=Kapat[1];
for (int i=2; i<=Period_bars; i++)
{
if (ABS_Yüksek<Yüksek[i]) ABS_Yüksek=Yüksek[i];
}
if (TD_Close>ABS_Yüksek)
{
if (OrdersTotal () <= 1 && newCandle != Zaman[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp,"",magic,0);
else newCandle = Zaman[0];
}
Dönem_çubukları <= Çubuklar - 1 olmalıdır
Tünaydın arkadaşlar! Aşağıdaki sorunu çözmeme yardım edin: Basit bir Expert Advisor yazmaya çalışıyorum ve aşağıdakilerle karşılaştım: SL değeri 0'dan farklı bir şeye ayarlanmışsa, işlemler hiç açılmaz ve TP, TStop ve TrailingStep işlevleri hiç çalışmıyor.
Kodda ne düzeltilmeli?
Tünaydın arkadaşlar! Aşağıdaki sorunu çözmeme yardım edin: Basit bir Expert Advisor yazmaya çalışıyorum ve aşağıdakilerle karşılaştım: SL değeri 0'dan farklı bir şeye ayarlanmışsa, işlemler hiç açılmaz ve TP, TStop ve TrailingStep işlevleri hiç çalışmıyor.
Kodda ne düzeltilmeli?