나는 가격 수준에 대한 시간 만료 조건을 만들 수 없습니다. 내가 전에 언급했듯이 가격이 96 캔들 이상 동안 LSell 미만 또는 LBuy 이상을 유지하면 해당 가격 수준을 기각합니다.
if(Time[high_bar]<Time[96]) && LevelSset=true....를 사용하려고 했습니다. LevelSset을 false로 설정했습니다... 하지만 작동하지 않는 것 같습니다.... voidCkExpLSell()... i 내가 뭔가 잘못하고 있다고 확신하지만 ... 나는 무엇인지 잘 모르겠으므로 제발 도와주세요 :)
//+------------------------------------------------------------------+//| 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 ;
}
}
나는 가격 수준에 대한 시간 만료 조건을 만들 수 없습니다 . 내가 전에 언급했듯이 가격이 96 캔들 이상 동안 LSell 미만 또는 LBuy 이상을 유지하면 해당 가격 수준을 기각합니다.
if(Time[high_bar]<Time[96]) && LevelSset=true....를 사용하려고 했습니다. LevelSset을 false로 설정했습니다... 하지만 작동하지 않는 것 같습니다.... voidCkExpLSell()... i 내가 뭔가 잘못하고 있다고 확신하지만 ... 나는 무엇인지 잘 모르겠으므로 제발 도와주세요 :)
ObjectCreate ( "olive " + Time [ 0 ]
라인의 이름은 생성되는 순간을 알려줍니다.
나는 이미 이 주제에서 시간 만료를 확인하는 방법의 이름을 사용하여 확인 하는 방법을 알려 드렸습니다.
몇 가지 아이디어, 무엇이 잘못되었는지... 누구?
감사합니다
일단 객체를 생성합니다. . .
. . . 다시 생성할 수 없으며 이미 존재합니다. . . 대신 존재 하는지 확인 하고 다시 만들지 않으면 ObjectSet()을 사용하여 이동하십시오.
나는 각 양초에 다른 이름을 사용하여 개체에 문제가 없었습니다.
나는 이것을 이렇게 다시 쓰고 이제 완벽하게 작동합니다.
판매 수준을 설정하고 해당 수준에서 두 번 닫히면 -> LevelSset=false -> 다음 LSell 검색을 시작합니다.
안녕하세요, 도움이 필요합니다.
나는 가격 수준에 대한 시간 만료 조건을 만들 수 없습니다. 내가 전에 언급했듯이 가격이 96 캔들 이상 동안 LSell 미만 또는 LBuy 이상을 유지하면 해당 가격 수준을 기각합니다.
if(Time[high_bar]<Time[96]) && LevelSset=true....를 사용하려고 했습니다. LevelSset을 false로 설정했습니다... 하지만 작동하지 않는 것 같습니다.... void CkExpLSell()... i 내가 뭔가 잘못하고 있다고 확신하지만 ... 나는 무엇인지 잘 모르겠으므로 제발 도와주세요 :)
안녕하세요, 도움이 필요합니다.
나는 가격 수준에 대한 시간 만료 조건을 만들 수 없습니다 . 내가 전에 언급했듯이 가격이 96 캔들 이상 동안 LSell 미만 또는 LBuy 이상을 유지하면 해당 가격 수준을 기각합니다.
if(Time[high_bar]<Time[96]) && LevelSset=true....를 사용하려고 했습니다. LevelSset을 false로 설정했습니다... 하지만 작동하지 않는 것 같습니다.... void CkExpLSell()... i 내가 뭔가 잘못하고 있다고 확신하지만 ... 나는 무엇인지 잘 모르겠으므로 제발 도와주세요 :)
라인의 이름은 생성되는 순간을 알려줍니다.
나는 이미 이 주제에서 시간 만료를 확인하는 방법의 이름을 사용하여 확인 하는 방법을 알려 드렸습니다.
그리고 나는 당신이 그 방법을 사용하는 것을 보지 못했습니다 !!
당신의 지표는 거래 기능을 할 수 없습니다 !!!!!!!!....
OrderSend를 수행하면 EA를 만드십시오.
라인의 이름은 생성되는 순간을 알려줍니다.
나는 이미 이 주제에서 시간 만료를 확인하는 방법의 이름을 사용하여 확인하는 방법을 알려 드렸습니다.
그리고 나는 당신이 그 방법을 사용하는 것을 보지 못했습니다 !!
@ deVries ObjectGet(Name, OBJPROP_TIME1)이 더 좋으며 불필요한 코드가 필요하지 않습니다(StringSubstr() StrToTime())
안녕 얘들아,
전략 테스터에서 상황이 괜찮아 보입니다. 그런 다음 ea를 다른 플랫폼 데모 계정에 놓았고 이 오류가 나타날 때까지 작동했습니다(예상대로 가격 lvls 설정 및 거래 만들기).
전략 테스터에서 테스트 기간을 변경했는데 같은 오류가 발생했습니다. 그것이 LevelBset인지 LevelSset인지는 중요하지 않습니다. ea가 올바른 가격으로 레벨을 설정하면 가격 레벨은 0.0000으로 수정됩니다.
나는 지금까지 실수를 찾지 못했으므로 내 코드를 확인하십시오.
도와주셔서 감사합니다.