ObjectCreate ( "tomato " +H, OBJ_ARROW , 0 , Time [high_bar],LSell+ Point * 20 );
. . . tekrar oluşturamazsınız, zaten var. . . bunun yerine var olup olmadığını kontrol edin ve tekrar denemezse ObjectSet() kullanarak hareket ettirin.
fiyat seviyesi için bir zaman aşımı şartı koyamıyorum. Daha önce de belirttiğim gibi, fiyat 96'dan fazla mum için LSell altında veya LBuy üzerinde kalırsa, bu fiyat seviyesini reddetmek için.
if(Time[high_bar]<Time[96]) && LevelSset=true.... kullanmaya çalışıyordum LevelSset'i false olarak ayarlayın... ama çalışmıyor gibi görünüyor.... voidCkExpLSell ()... i yanlış bir şey yaptığımdan eminim ama... ne olduğu hakkında hiçbir fikrim yok, o yüzden yardım edin lütfen :)
//+------------------------------------------------------------------+//| 3expert.mq4 |//| ant |//| |//+------------------------------------------------------------------+#property copyright"ant"#property link""#property indicator_chart_window#property indicator_buffers1#property indicator_color1 Yellow
externbool UseTrigger1= true ;
externbool UseTrigger2= true ;
externint Kperiod = 80 ;
externint Dperiod = 30 ;
externint Stochshift = 30 ;
externint AddToSL= 0 ;
externint MinSL= 50 ;
externint MaxSL= 100 ;
externint TakeProfit= 50 ;
externint Slippage= 0 ;
externdouble lot= 0.10 ;
int MagicNumber= 777 ;
bool TriggerBuy1= false ;
bool TriggerBuy2= false ;
bool TriggerSell1= false ;
bool TriggerSell2= false ;
bool LevelBset= false ;
bool LevelSset= false ;
double LevelB,LevelS;
double ticketBuy,ticketSell;
double SL,TP;
double stoch;
double LBuy;
double LSell;
int high_bar,low_bar;
bool BarsOnChart;
bool AlternativeEntryB= false ;
datetime AlternativeEntryBTime;
bool AlternativeEntryS= false ;
datetime AlternativeEntrySTime;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----//----return ( 0 );
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return ( 0 );
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
//----
stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );
SellLevelSet();
CkExpLSell ();
BuyLevelSet();
CkExpLBuy ();
if (LevelSset== true || LevelBset== true )
{
if (IsNewBar ())
{
CheckTrigger();
}
}
//----return ( 0 );
}
//+------------------------------------------------------------------+////////////////////////////IsNewCandle///////////////////////////////bool IsNewBar ()
{
if ( Bars ==BarsOnChart)
return ( false );
BarsOnChart = Bars ;
return ( true );
}
/////////////////////////////LSell Setup////////////////////////////////void SellLevelSet()
{
if (stoch> 75 && LevelSset== false )
{
LSell= High [ iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 )];
high_bar= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 );
if ( Bid <LSell && High [ 0 ]<LSell && High [ 1 ]<LSell)
{
ObjectCreate ( "tomato " + Time [ 0 ], OBJ_ARROW , 0 , Time [high_bar],LSell+ Point * 20 );
ObjectSet ( "tomato " + Time [ 0 ], OBJPROP_ARROWCODE , 242 );
ObjectSet ( "tomato " + Time [ 0 ], OBJPROP_COLOR ,Tomato);
LevelSset= true ;
Print ( "LevelSset on " + DoubleToStr (LSell, 5 ));
}
}
}
///////////////////////////////LSellCheckExp/////////////////////////////////void CkExpLSell ()
{
if (LevelSset== true )
{
if ( Close [ 2 ]>LSell && Close [ 1 ]>LSell) //LSell expires after two bars close over
{
LevelSset= false ;
Print ( DoubleToStr (LSell, 5 )+ " expired - close" );
}
if ( Time [high_bar]< Time [ 96 ]) //LSell expires after 96 bars
{
LevelSset= false ;
Print ( DoubleToStr (LSell, 5 )+ " expired - time" );
}
}
}
/////////////////////////////LBuy Setup////////////////////////////////void BuyLevelSet()
{
if (stoch< 25 && LevelBset== false )
{
LBuy= Low [ iLowest ( NULL , 0 , MODE_HIGH , 34 , 2 )];
low_bar= iLowest ( NULL , 0 , MODE_HIGH , 34 , 2 );
if ( Bid >LBuy && Low [ 0 ]>LBuy && Low [ 1 ]>LBuy)
{
ObjectCreate ( "olive " + Time [ 0 ], OBJ_ARROW , 0 , Time [low_bar],LBuy- Point * 20 );
ObjectSet ( "olive " + Time [ 0 ], OBJPROP_ARROWCODE , 241 );
ObjectSet ( "olive " + Time [ 0 ], OBJPROP_COLOR ,Olive);
LevelBset= true ;
Print ( "LevelBset on " + DoubleToStr (LBuy, 5 ));
}
}
}
///////////////////////////////LBuyCheckExp/////////////////////////////////void CkExpLBuy ()
{
if (LevelBset== true )
{
if ( Close [ 2 ]<LBuy && Close [ 1 ]<LBuy)
{
LevelBset= false ;
Print ( DoubleToStr (LBuy, 5 )+ " expired - close" );
}
}
}
//////////////////////CHECK TRIGGER/////////////////////void CheckTrigger()
{
//Trigger1if (UseTrigger1)
{
if ( Low [ 2 ]>LBuy && Low [ 1 ]<LBuy && Close [ 1 ]>LBuy)
{
TriggerBuy1= true ;
Alert ( "Tbuy1 ON" );
}
else
TriggerBuy1= false ;
if ( High [ 2 ]<LSell && High [ 1 ]>LSell && Close [ 1 ]<LSell)
{
TriggerSell1= true ;
Alert ( "TSeLL1 ON" );
}
else
TriggerSell1= false ;
}
else
{
TriggerBuy1= false ;
TriggerSell1= false ;
}
//Trigger2 if (UseTrigger2)
{
if ( Low [ 3 ]>LBuy && Low [ 2 ]<LBuy && Close [ 2 ]<LBuy && Close [ 1 ]>LBuy)
{
TriggerBuy2= true ;
Alert ( "Tbuy2 ON" );
}
else
TriggerBuy2= false ;
if ( High [ 3 ]<LSell && High [ 2 ]>LSell && Close [ 2 ]>LSell && Close [ 1 ]<LSell)
TriggerSell2= true ;
else
TriggerSell2= false ;
}
else
{
TriggerBuy2= false ;
TriggerSell2= false ;
}
CheckOpen();
}
//////////////////////////////////CheckOpen///////////////////////////////////void CheckOpen()
{
if (TriggerBuy1)
{
SL= Low [ 1 ]-AddToSL* Point ;
if ( ( Open [ 0 ]-SL)/ Point <=MaxSL && ( Open [ 0 ]-SL)/ Point >=MinSL)
{
Print ( "Trigger1: SL" + DoubleToStr (SL, 0 )+ "under" + DoubleToStr (MaxSL, 0 )+ " pips" );
OpenTrade( 1 , "Trigger1" );
}
if ( ( Open [ 0 ]-SL)/ Point <=MaxSL && ( Open [ 0 ]-SL)/ Point <MinSL)
{
SL= Open [ 0 ]-MinSL* Point ;
Print ( "Trigger1: SL minimum" + DoubleToStr (MinSL, 0 )+ "pips, SL=" + DoubleToStr (SL, 5 ));
OpenTrade( 1 , "Trigger1" );
}
if ( ( Open [ 0 ]-SL)/ Point >MaxSL)
{
Print ( "Trigger1: SL not taken because difference is " , DoubleToStr (( Open [ 0 ]-SL)/ Point , 0 ));
AlternativeEntryB= true ;
AlternativeEntryBTime= Time [ 0 ];
}
}
if (TriggerSell1)
{
SL= High [ 1 ]+AddToSL* Point ;
SL=SL+ MathAbs ( Ask - Bid );
if ( (SL- Open [ 0 ])/ Point <=MaxSL && (SL- Open [ 0 ])/ Point >=MinSL)
{
Print ( "Trigger1: SL" + DoubleToStr (SL, 0 )+ "under" + DoubleToStr (MaxSL, 0 )+ "pips" );
OpenTrade( 2 , "Trigger1" );
}
if ( (SL- Open [ 0 ])/ Point <=MaxSL && (SL- Open [ 0 ])/ Point <MinSL)
{
SL= Open [ 0 ]+MinSL* Point + MathAbs ( Ask - Bid );
Print ( "Trigger1: SL minimum" + DoubleToStr (MinSL, 0 )+ "pips, SL=" + DoubleToStr (SL, 5 ));
OpenTrade( 2 , "Trigger1" );
}
if ( (SL- Open [ 0 ])/ Point <=MaxSL)
{
Print ( "Trigger1: SL not taken because difference is " , DoubleToStr ((SL- Open [ 0 ])/ Point , 0 ));
AlternativeEntryS= true ;
AlternativeEntrySTime= Time [ 0 ];
}
}
if (TriggerBuy2)
{
SL= Low [ iLowest ( NULL , 0 , MODE_LOW , 3 , 1 )]-AddToSL* Point ;
if ( ( Open [ 0 ]-SL)/ Point <=MaxSL && ( Open [ 0 ]-SL)/ Point >=MinSL)
{
Print ( "Trigger2: SL" + DoubleToStr (SL, 0 )+ "under" + DoubleToStr (MaxSL, 0 )+ "pips" );
OpenTrade( 1 , "Trigger2" );
}
if ( ( Open [ 0 ]-SL)/ Point <=MaxSL && ( Open [ 0 ]-SL)/ Point <MinSL)
{
SL= Open [ 0 ]-MinSL* Point ;
Print ( "Trigger2: SL minimum" + DoubleToStr (MinSL, 0 )+ " pips, SL=" + DoubleToStr (SL, 5 ));
OpenTrade( 1 , "Trigger2" );
}
if ( ( Open [ 0 ]-SL)/ Point >MaxSL)
{
Print ( "Trigger2: SL not taken because difference is " , DoubleToStr (( Open [ 0 ]-SL)/ Point , 0 ));
AlternativeEntryB= true ;
AlternativeEntryBTime= Time [ 0 ];
}
}
if (TriggerSell2)
{
SL= High [ iHighest ( NULL , 0 , MODE_HIGH , 3 , 1 )]+AddToSL* Point ;
SL=SL+ MathAbs ( Ask - Bid );
if ( (SL- Open [ 0 ])/ Point <=MaxSL && (SL- Open [ 0 ])/ Point >=MinSL)
{
Print ( "Trigger2: SL" + DoubleToStr (SL, 0 )+ "under" + DoubleToStr (MaxSL, 0 )+ "pips" );
OpenTrade( 2 , "Trigger2" );
}
if ( (SL- Open [ 0 ])/ Point <=MaxSL && (SL- Open [ 0 ])/ Point <MinSL)
{
SL= Open [ 0 ]+MinSL* Point + MathAbs ( Ask - Bid );
Print ( "Trigger2: SL minimum" + DoubleToStr (MinSL, 0 )+ "pips, SL=" + DoubleToStr (SL, 5 ));
OpenTrade( 2 , "Trigger2" );
}
if ( (SL- Open [ 0 ])/ Point <=MaxSL)
{
Print ( "Trigger2: SL not taken because difference is " , DoubleToStr ((SL- Open [ 0 ])/ Point , 0 ));
AlternativeEntryS= true ;
AlternativeEntrySTime= Time [ 0 ];
}
}
}
//////////////////////////////////////////Open Trade//////////////////////////////////////////////void OpenTrade( int dir, string trigger)
{
ticketBuy= 0 ;
ticketSell= 0 ;
if (dir== 1 )
{
Print (trigger, " - Opening BUY" );
TP= Ask +TakeProfit* Point ;
ticketBuy= OrderSend ( Symbol (), OP_BUY ,lot, Ask ,Slippage,SL,TP,trigger,MagicNumber, 0 ,Blue);
}
if (dir== 2 )
{
Print (trigger, " - Opening SELL" );
TP= Bid -TakeProfit* Point ;
ticketSell= OrderSend ( Symbol (), OP_SELL ,lot, Bid ,Slippage,SL,TP,trigger,MagicNumber, 0 ,Red);
}
if (ticketBuy> 0 )
{
Print ( "Deleting - Buy Level" , DoubleToStr (LBuy, 5 ));
LevelBset= false ;
}
if (ticketSell> 0 )
{
Print ( "Deleting - Sell Level" , DoubleToStr (LSell, 5 ));
LevelSset= false ;
}
}
fiyat düzeyi için bir zaman aşımı koşulu getiremiyorum . Daha önce de belirttiğim gibi, fiyat 96'dan fazla mum için LSell altında veya LBuy üzerinde kalırsa, bu fiyat seviyesini reddetmek için.
if(Time[high_bar]<Time[96]) && LevelSset=true.... kullanmaya çalışıyordum LevelSset'i false olarak ayarlayın... ama çalışmıyor gibi görünüyor.... voidCkExpLSell ()... i yanlış bir şey yaptığımdan eminim ama... ne olduğu hakkında hiçbir fikrim yok, o yüzden yardım edin pls :)
ObjectCreate ( "olive " + Time [ 0 ]
hattın adı size oluşturulduğu anı anlatıyor
Bu başlıkta size zaten zaman aşımını kontrol etmenin yolunu hattın adını kullanarak nasıl kontrol edeceğinizi anlattım.
int Bar96 = 96 * Period () * 60 ;
:
if ( Time [ 0 ] - Bar96 > SetBar && ObjectGet (Name, OBJPROP_ARROWCODE ) == 242)
Bu, M1'in bir dakika içinde kene olmadığında veya hafta sonu boyunca tüm TF'lerin haftalıktan daha az olduğu durumda olduğu gibi, grafikte eksik çubuk olmadığını varsayar. Varsaymayın, basitleştirin:
96 bar önce
// int Bar96 = 96 * Period() * 60;
:
if ( Time [ 96 ] > SetBar && ObjectGet (Name, OBJPROP_ARROWCODE ) == 242 )
96 dolu bar önce.
int Bar96 = iBarShift ( NULL , 0 , Time [ 0 ] - 96 * Period () * 60 );
:
if ( Time [Bar96] > SetBar && ObjectGet (Name, OBJPROP_ARROWCODE ) == 242 )
strateji test cihazında işler yolunda görünüyor. sonra her bir cihazı farklı platformlardaki demo hesaplarına koydum ve bu hata ortaya çıkana kadar çalıştı (fiyat seviyelerini belirlemek ve takasları beklendiği gibi yapmak).
strateji test cihazında test süresini değiştiriyorum ve aynı hatayı alıyorum... bunun bir LevelBset veya LevelSset olması önemli değil, her biri seviyeyi doğru fiyata ayarlıyor, ardından fiyat seviyesi 0.0000 olarak değiştiriliyor.
Şu ana kadar hatayı bulamadım, bu yüzden lütfen kodumu kontrol edin.
Yardımlarınız için teşekkür ederim.
//+------------------------------------------------------------------+//| 3expert.mq4 |//| ant |//| |//+------------------------------------------------------------------+#property copyright"ant"#property link""externbool UseTrigger1= true ;
externbool UseTrigger2= true ;
externint Kperiod = 80 ;
externint Dperiod = 30 ;
externint Stochshift = 30 ;
externint AddToSL= 0 ;
externint MinSL= 50 ;
externint MaxSL= 100 ;
externint TakeProfit= 50 ;
externint Slippage= 0 ;
externdouble lot= 1 ;
int MagicNumber= 777 ;
/*extern int Startday=1;
extern int Starthour=0;
extern int Startminute=30;
extern int Endday=5;
extern int Endhour=20;
extern int Closehour=20;
bool Weekend=false;*/bool TriggerBuy1= false ;
bool TriggerBuy2= false ;
bool TriggerSell1= false ;
bool TriggerSell2= false ;
bool LevelBset= false ;
bool LevelSset= false ;
double LevelB,LevelS;
double ticketBuy,ticketSell;
double SL,TP;
double stoch;
double LBuy;
double LSell;
int high_bar,low_bar;
bool AlternativeEntryB= false ;
datetime AlternativeEntryBTime;
bool AlternativeEntryS= false ;
datetime AlternativeEntrySTime;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----//----return ( 0 );
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return ( 0 );
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
//if (TradingHours())if (WeClose())
return ( 0 );
stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );
SellLevelSet();
BuyLevelSet();
if ( OrdersTotal ()== 0 )
{
CheckRecoveryTrade();
CheckAlternativeEntry();
}
if (LevelSset== true || LevelBset== true )
{
if (IsNewBar ())
{
CkExpLSell ();
CkExpLBuy ();
CkExpTime();
CheckTrigger();
}
}
//----return ( 0 );
}
//+------------------------------------------------------------------+////////////////////////////TradingHours//////////////////////////////bool WeClose ()
{
if ( DayOfWeek ()== 0 || DayOfWeek ()== 6 )
{ LevelSset= false ;
del242();
LevelBset= false ;
del241();
return ( true );
}
else
{ return ( false );}
}
////////////////////////////IsNewCandle///////////////////////////////bool IsNewBar ()
{
int BarsOnChart;
if ( Bars ==BarsOnChart)
return ( false );
BarsOnChart = Bars ;
return ( true );
}
/////////////////////////////LSell Setup////////////////////////////////void SellLevelSet()
{
if (stoch> 75 && LevelSset== false )
{
LSell= High [ iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 )];
high_bar= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 );
if ( Bid <LSell && High [ 0 ]<LSell && High [ 1 ]<LSell)
{
if ( Time [high_bar]> TimeCurrent ()- 10800 )
{
ObjectCreate ( "tomato " + Time [high_bar], OBJ_ARROW , 0 , Time [high_bar],LSell+ Point * 20 );
ObjectSet ( "tomato " + Time [high_bar], OBJPROP_ARROWCODE , 242 );
ObjectSet ( "tomato " + Time [high_bar], OBJPROP_COLOR ,Tomato);
LevelSset= true ;
Print ( "LevelSset on " + DoubleToStr (LSell, 5 ));
}
}
}
}
///////////////////////////////Object Delete////////////////////////////////void del242 ()
{
string Name;
double SetBar;
for ( int i = 0 ; i < ObjectsTotal (); i++)
{
Name= ObjectName (i);
SetBar = ObjectGet (Name, OBJPROP_TIME1 );
if ( ObjectGet (Name, OBJPROP_ARROWCODE ) == 242 )
{
ObjectDelete (Name);
}
}
}
void del241 ()
{
string Name;
double SetBar;
for ( int i = 0 ; i < ObjectsTotal (); i++)
{
Name= ObjectName (i);
SetBar = ObjectGet (Name, OBJPROP_TIME1 );
if ( ObjectGet (Name, OBJPROP_ARROWCODE ) == 241 )
{
ObjectDelete (Name);
}
}
}
///////////////////////////////LSellCheckExp/////////////////////////////////void CkExpLSell ()
{
if ( Close [ 2 ]>LSell && Close [ 1 ]>LSell) //LSell expires after two bars close over
{
LevelSset= false ;
Print ( DoubleToStr (LSell, 5 )+ " expired - close" );
del242 ();
}
}
////////////////////////////////96BarExp//////////////////////////////void CkExpTime ()
{
int Bar96 = iBarShift ( NULL , 0 , Time [ 0 ]- 96 * Period ()* 60 );
string Name;
double SetBar;
for ( int i = 0 ; i < ObjectsTotal (); i++)
{
Name= ObjectName (i);
SetBar = ObjectGet (Name, OBJPROP_TIME1 );
if ( Time [Bar96] > SetBar && ObjectGet (Name, OBJPROP_ARROWCODE ) == 242 )
{
LevelSset = false ;
Print ( DoubleToStr (LSell, 5 )+ " expired - time" );
ObjectDelete (Name);
}
if ( Time [Bar96] > SetBar && ObjectGet (Name, OBJPROP_ARROWCODE ) == 241 )
{
LevelBset = false ;
Print ( DoubleToStr (LBuy, 5 )+ " expired - time" );
ObjectDelete (Name);
}
}
}
/////////////////////////////LBuy Setup////////////////////////////////void BuyLevelSet()
{
if (stoch< 25 && LevelBset== false )
{
LBuy= Low [ iLowest ( NULL , 0 , MODE_LOW , 34 , 2 )];
low_bar= iLowest ( NULL , 0 , MODE_LOW , 34 , 2 );
if ( Bid >LBuy && Low [ 0 ]>LBuy && Low [ 1 ]>LBuy)
{
if ( Time [low_bar]> TimeCurrent ()- 10800 )
{
ObjectCreate ( "olive " + Time [low_bar], OBJ_ARROW , 0 , Time [low_bar],LBuy- Point * 20 );
ObjectSet ( "olive " + Time [low_bar], OBJPROP_ARROWCODE , 241 );
ObjectSet ( "olive " + Time [low_bar], OBJPROP_COLOR ,Olive);
LevelBset= true ;
Print ( "LevelBset on " + DoubleToStr (LBuy, 5 ));
}
}
}
}
///////////////////////////////LBuyCheckExp/////////////////////////////////void CkExpLBuy ()
{
if ( Close [ 2 ]<LBuy && Close [ 1 ]<LBuy)
{
LevelBset= false ;
Print ( DoubleToStr (LBuy, 5 )+ " expired - close" );
del241();
}
}
//////////////////////CHECK TRIGGER/////////////////////void CheckTrigger()
{
//Trigger1if (UseTrigger1)
{
if ( Low [ 2 ]>LBuy && Low [ 1 ]<LBuy && Close [ 1 ]>LBuy)
{
TriggerBuy1= true ;
Print ( "Tbuy1 ON" );
del241();
}
else
TriggerBuy1= false ;
if ( High [ 2 ]<LSell && High [ 1 ]>LSell && Close [ 1 ]<LSell)
{
TriggerSell1= true ;
Print ( "TSeLL1 ON" );
del242();
}
else
TriggerSell1= false ;
}
else
{
TriggerBuy1= false ;
TriggerSell1= false ;
}
//Trigger2 if (UseTrigger2)
{
if ( Low [ 3 ]>LBuy && Low [ 2 ]<LBuy && Close [ 2 ]<LBuy && Close [ 1 ]>LBuy)
{
TriggerBuy2= true ;
Print ( "Tbuy2 ON" );
del241();
}
else
TriggerBuy2= false ;
if ( High [ 3 ]<LSell && High [ 2 ]>LSell && Close [ 2 ]>LSell && Close [ 1 ]<LSell)
{
TriggerSell2= true ;
Print ( "TSeLL2 ON" );
del242();
}
else
TriggerSell2= false ;
}
else
{
TriggerBuy2= false ;
TriggerSell2= false ;
}
CheckOpen();
}
//////////////////////////////////CheckOpen///////////////////////////////////void CheckOpen()
{
if (TriggerBuy1)
{
SL= Low [ 1 ]-AddToSL* Point ;
if ( ( Ask -SL)/ Point <=MaxSL && ( Ask -SL)/ Point >=MinSL)
{
Print ( "Trigger1: SL" + DoubleToStr (SL, 0 )+ "under" + DoubleToStr (MaxSL, 0 )+ " pips" );
OpenTrade( 1 , "Trigger1" );
}
if ( ( Ask -SL)/ Point <=MaxSL && ( Ask -SL)/ Point <MinSL)
{
SL= Ask -MinSL* Point ;
Print ( "Trigger1: SL minimum " + DoubleToStr (MinSL, 0 )+ " pips, SL=" + DoubleToStr (SL, 5 ));
OpenTrade( 1 , "Trigger1" );
}
if ( ( Ask -SL)/ Point >MaxSL)
{
Print ( "Trigger1: SL not taken because difference is " , DoubleToStr (( Open [ 0 ]-SL)/ Point , 0 ));
AlternativeEntryB= true ;
AlternativeEntryBTime= Time [ 0 ];
}
}
if (TriggerSell1)
{
SL= High [ 1 ]+AddToSL* Point ;
SL=SL+ MathAbs ( Ask - Bid );
if ( (SL- Open [ 0 ])/ Point <=MaxSL && (SL- Open [ 0 ])/ Point >=MinSL)
{
Print ( "Trigger1: SL" + DoubleToStr (SL, 0 )+ "under" + DoubleToStr (MaxSL, 0 )+ "pips" );
OpenTrade( 2 , "Trigger1" );
}
if ( (SL- Open [ 0 ])/ Point <=MaxSL && (SL- Open [ 0 ])/ Point <MinSL)
{
SL= Open [ 0 ]+MinSL* Point ;
Print ( "Trigger1: SL minimum" + DoubleToStr (MinSL, 0 )+ "pips, SL=" + DoubleToStr (SL, 5 ));
OpenTrade( 2 , "Trigger1" );
}
if ( (SL- Open [ 0 ])/ Point >MaxSL)
{
Print ( "Trigger1: SL not taken because difference is " , DoubleToStr ((SL- Open [ 0 ])/ Point , 0 ));
AlternativeEntryS= true ;
AlternativeEntrySTime= Time [ 0 ];
}
}
if (TriggerBuy2)
{
SL= Low [ iLowest ( NULL , 0 , MODE_LOW , 3 , 1 )]-AddToSL* Point ;
if ( ( Ask -SL)/ Point <=MaxSL && ( Ask -SL)/ Point >=MinSL)
{
Print ( "Trigger2: SL" + DoubleToStr (SL, 0 )+ "under" + DoubleToStr (MaxSL, 0 )+ "pips" );
OpenTrade( 1 , "Trigger2" );
}
if ( ( Ask -SL)/ Point <=MaxSL && ( Ask -SL)/ Point <MinSL)
{
SL= Open [ 0 ]+ MathAbs ( Ask - Bid )-MinSL* Point ;
Print ( "Trigger2: SL minimum " + DoubleToStr (MinSL, 0 )+ " pips, SL=" + DoubleToStr (SL, 5 ));
OpenTrade( 1 , "Trigger2" );
}
if ( ( Ask -SL)/ Point >MaxSL)
{
Print ( "Trigger2: SL not taken because difference is " , DoubleToStr (( Open [ 0 ]-SL)/ Point , 0 ));
AlternativeEntryB= true ;
AlternativeEntryBTime= Time [ 0 ];
}
}
if (TriggerSell2)
{
SL= High [ iHighest ( NULL , 0 , MODE_HIGH , 3 , 1 )]+AddToSL* Point ;
SL=SL+ MathAbs ( Ask - Bid );
if ( (SL- Open [ 0 ])/ Point <=MaxSL && (SL- Open [ 0 ])/ Point >=MinSL)
{
Print ( "Trigger2: SL" + DoubleToStr (SL, 0 )+ "under" + DoubleToStr (MaxSL, 0 )+ "pips" );
OpenTrade( 2 , "Trigger2" );
}
if ( (SL- Open [ 0 ])/ Point <=MaxSL && (SL- Open [ 0 ])/ Point <MinSL)
{
SL= Open [ 0 ]+MinSL* Point ;
Print ( "Trigger2: SL minimum" + DoubleToStr (MinSL, 0 )+ "pips, SL=" + DoubleToStr (SL, 5 ));
OpenTrade( 2 , "Trigger2" );
}
if ( (SL- Open [ 0 ])/ Point >MaxSL)
{
Print ( "Trigger2: SL not taken because difference is " , DoubleToStr ((SL- Open [ 0 ])/ Point , 0 ));
AlternativeEntryS= true ;
AlternativeEntrySTime= Time [ 0 ];
}
}
}
//////////////////////////////////////////Open Trade//////////////////////////////////////////////void OpenTrade( int dir, string trigger)
{
ticketBuy= 0 ;
ticketSell= 0 ;
if ( OrdersTotal ()== 0 )
{
if (dir== 1 )
{
Print (trigger, " - Opening BUY" );
TP= Ask +TakeProfit* Point ;
ticketBuy= OrderSend ( Symbol (), OP_BUY ,lot, Ask ,Slippage,SL,TP,trigger,MagicNumber, 0 ,Blue);
}
if (dir== 2 )
{
Print (trigger, " - Opening SELL" );
TP= Bid -TakeProfit* Point ;
ticketSell= OrderSend ( Symbol (), OP_SELL ,lot, Bid ,Slippage,SL,TP,trigger,MagicNumber, 0 ,Red);
}
if (ticketBuy> 0 )
{
Print ( "Deleting - Buy Level" , DoubleToStr (LBuy, 5 ));
LevelBset= false ;
}
if (ticketSell> 0 )
{
Print ( "Deleting - Sell Level" , DoubleToStr (LSell, 5 ));
LevelSset= false ;
}
}
}
///////////////////////////CHECK ALTERNATIVE ENTRY////////////////////////////void CheckAlternativeEntry()
{
if (AlternativeEntryB)
{
if ( Time [ 0 ]-AlternativeEntryBTime>= Time [ 0 ]- Time [ 17 ])
{
AlternativeEntryB= false ;
del241();
}
}
if (AlternativeEntryS)
{
if ( Time [ 0 ]-AlternativeEntrySTime>= Time [ 0 ]- Time [ 17 ])
{
AlternativeEntryS= false ;
del242();
}
}
if (AlternativeEntryB)
{
if ( ( Ask -SL) / Point <= 70 )
{
Print ( "Trigger: SL under 7 pips" );
OpenTrade( 1 , "Trigger" );
AlternativeEntryB= false ;
}
}
if (AlternativeEntryS)
{
if ( (SL- Bid ) / Point <= 70 )
{
Print ( "Trigger: SL under 7 pips" );
OpenTrade( 2 , "Trigger" );
AlternativeEntryS= false ;
}
}
}
////////////////////////////CHECK RECOVERY TRADE/////////////////////void CheckRecoveryTrade()
{
OrderSelect ( OrdersHistoryTotal ()- 1 , SELECT_BY_POS , MODE_HISTORY );
double Loss= MathAbs ( OrderOpenPrice ()- OrderClosePrice ());
if ( OrderStopLoss ()== OrderClosePrice ())
{
if ( OrderCloseTime ()< Time [ 0 ] && OrderCloseTime ()>= Time [ 1 ])
{
if ( OrderType ()== OP_BUY )
{
if ( Close [ 1 ]> OrderStopLoss ())
{
SL= Low [ 1 ]-AddToSL* Point ;
if (( Ask -SL)/ Point <= 100 )
{
Print ( "Recovery BUY" );
TP= Ask +Loss;
OrderSend ( Symbol (), OP_BUY ,lot, Ask ,Slippage,SL,TP, "recovery" ,MagicNumber, 0 ,Olive);
}
}
}
if ( OrderType ()== OP_SELL )
{
if ( Close [ 1 ]< OrderStopLoss ())
{
SL= High [ 1 ]+AddToSL* Point ;
SL=SL+ MathAbs ( Ask - Bid );
if ( (SL- Open [ 0 ])/ Point <= 100 )
{
Print ( "Recovery SELL" );
TP= Bid -Loss;
OrderSend ( Symbol (), OP_SELL ,lot, Bid ,Slippage,SL,TP, "recovery" ,MagicNumber, 0 ,Pink);
}
}
}
}
}
}
bazı fikirler, yanlış olan ne... kimse?
teşekkür ederim
Bir nesne oluşturduğunuzda . . .
. . . tekrar oluşturamazsınız, zaten var. . . bunun yerine var olup olmadığını kontrol edin ve tekrar denemezse ObjectSet() kullanarak hareket ettirin.
Her mum için farklı bir isim kullandım, bu yüzden nesnede sorun olmadı.
bu şekilde yeniden yazıyorum ve şimdi mükemmel çalışıyor:
bir satış seviyesi belirler ve bu seviyenin üzerinde iki kapanış alırsam -> LevelSset=false -> sonraki LSell'i aramaya başlar.
merhaba, biraz yardıma ihtiyacım var.
fiyat seviyesi için bir zaman aşımı şartı koyamıyorum. Daha önce de belirttiğim gibi, fiyat 96'dan fazla mum için LSell altında veya LBuy üzerinde kalırsa, bu fiyat seviyesini reddetmek için.
if(Time[high_bar]<Time[96]) && LevelSset=true.... kullanmaya çalışıyordum LevelSset'i false olarak ayarlayın... ama çalışmıyor gibi görünüyor.... void CkExpLSell ()... i yanlış bir şey yaptığımdan eminim ama... ne olduğu hakkında hiçbir fikrim yok, o yüzden yardım edin lütfen :)
merhaba, biraz yardıma ihtiyacım var.
fiyat düzeyi için bir zaman aşımı koşulu getiremiyorum . Daha önce de belirttiğim gibi, fiyat 96'dan fazla mum için LSell altında veya LBuy üzerinde kalırsa, bu fiyat seviyesini reddetmek için.
if(Time[high_bar]<Time[96]) && LevelSset=true.... kullanmaya çalışıyordum LevelSset'i false olarak ayarlayın... ama çalışmıyor gibi görünüyor.... void CkExpLSell ()... i yanlış bir şey yaptığımdan eminim ama... ne olduğu hakkında hiçbir fikrim yok, o yüzden yardım edin pls :)
hattın adı size oluşturulduğu anı anlatıyor
Bu başlıkta size zaten zaman aşımını kontrol etmenin yolunu hattın adını kullanarak nasıl kontrol edeceğinizi anlattım.
ve bu yöntemi kullandığını görmüyorum !!
Göstergeniz alım satım işlevlerini yapamıyor !!!!!!!!!!!!
OrderSend yaparsanız bir EA yapın
hattın adı size oluşturulduğu anı anlatıyor
Bu başlıkta size zaten zaman aşımını kontrol etmenin yolunu hattın adını kullanarak nasıl kontrol edeceğinizi anlattım.
ve bu yöntemi kullandığını görmüyorum !!
@ deVries ObjectGet(Name, OBJPROP_TIME1) daha da iyidir, gereksiz koda gerek yoktur (StringSubstr() StrToTime())
Merhaba millet,
strateji test cihazında işler yolunda görünüyor. sonra her bir cihazı farklı platformlardaki demo hesaplarına koydum ve bu hata ortaya çıkana kadar çalıştı (fiyat seviyelerini belirlemek ve takasları beklendiği gibi yapmak).
strateji test cihazında test süresini değiştiriyorum ve aynı hatayı alıyorum... bunun bir LevelBset veya LevelSset olması önemli değil, her biri seviyeyi doğru fiyata ayarlıyor, ardından fiyat seviyesi 0.0000 olarak değiştiriliyor.
Şu ana kadar hatayı bulamadım, bu yüzden lütfen kodumu kontrol edin.
Yardımlarınız için teşekkür ederim.