다른 이름이 필요합니다
ObjectCreate ( "tomato " + high_nr , OBJ_TREND , 0 , Time [high_nr],high_price, Time [ 0 ],high_price); ObjectSet ( "tomato " + high_nr , OBJPROP_COLOR ,Tomato);
~ 후에
ObjectCreate ( "olive" +low_nr, OBJ_TREND , 0 , Time [low_nr],low_price, Time [ 0 ],low_price); ObjectSet ( "olive" +low_nr, OBJPROP_COLOR ,Olive);
이 코드는 동일한 가격에 25개의 라인을 넣지만, 양초 low_nr(항상 10임, stoch <25 이후의 실수는 중요하지 않음)이 아니라 양초 35부터 시작합니다.
토마토도 마찬가지.
:(
객체가 생성되면 같은 이름으로 다른 객체를 생성할 수 없습니다.
그렇기 때문에 처음에는 잘 작동하지만 그 이후에는 (원래 코드에서) 작동하지 않습니다.
기준을 충족하는 마지막 라인만 차트에 표시하려면 init에서 라인을 생성한 다음 ObjectMove를 사용 하여 객체를 새 좌표로 이동합니다.
모든 과거 행을 표시하려면
ObjectCreate ( "tomato " + high_nr, OBJ_TREND , 0 , Time [high_nr],high_price, Time [ 0 ],high_price);
high_nr은 막대 이동이므로 나중에 복제될 가능성이 있으므로 제대로 작동하지 않습니다. 이름에 datetime을 사용하면 고유합니다.
여보세요
나는 이것을 코드로 작성하려고 시도했다.
stochastic(80,30,30)의 K% 선 > 75일 때 36개 막대(34,shift 2)를 되돌아보고 가장 높은 고점에서 현재 막대까지 H_line "토마토"를 그립니다.
K% line of stochastic(80,30,30) < 25일 때 36개 막대(34,shift 2)를 되돌아보고 가장 낮은 저점에서 현재 막대까지 H_line "올리브"를 그립니다.
내가 이것을 실행할 때 나는 토마토와 올리브에 대한 첫 번째 설정을 얻습니다. 그런 다음 저널에 "토마토 켜기"가 다른 가격 lvl을 얻더라도 차트에 새 토마토 라인이 표시되지 않습니다. 올리브도 마찬가지.
ea의 아이디어는 이 라인을 사용하여 거래를 시작하는 것입니다. 그래서 내가 마침내 원하는 것은 이것을 갖는 것입니다.
K%>75일 때
선 o 최고(지난 36개 막대)를 그립니다.
선이 켜져 있으면 선이 삭제될 때까지 더 이상 선을 그리지 않습니다.
거래가 열려 있으면 라인을 삭제하십시오
열려 있는 거래가 없고 k%>75로 결정된 막대에서 24개의 막대가 지난 경우에도 해당 라인을 삭제합니다.
:)
내 구멍 생활에서 작성한 내 첫 번째 코드와 마찬가지로 pls는 문제를 보는 방법을 가르쳐줍니다.
감사합니다
우리는 처음부터 .....
double stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );
막대 0에서 stoch는 막대 0 값 > 75에서 어딘가에 도달하고 더 낮은 값으로 끝납니다.
그 경우에 선을 그어야합니까 ?? 아니면 가까운 가격의 확률론적 끝을 위한 것입니까 ??
double high_price,low_price; int high_nr,low_nr; high_nr= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 ); high_price= High [high_nr]; low_nr= iLowest ( NULL , 0 , MODE_LOW , 34 , 2 ); low_price= Low [low_nr];
iHighest 및/또는 iLowest를 사용한 적이 있습니까 ??? iHighest 및 iLowest 작업 방법 보기
if(stoch > 75) high_price = 높음[iHighest(NULL,0,MODE_HIGH,.......
if(stoch < 25) low_price = 낮음[iLowest(.......
//-----
for (high_nr= 2 ;high_nr< 36 ;high_nr++) // why do you repeat this ?? { if ( Bid <high_price && stoch> 75 ) { ObjectCreate ( "tomato" , OBJ_TREND , 0 , Time [high_nr],high_price, Time [ 0 ],high_price); ObjectSet ( "tomato" , OBJPROP_COLOR ,Tomato); Print ( "tomato ON" +high_price); } }
한 번 생성하면 충분합니다 .... 루프는 { } 안에 있는 것만 반복합니다.
그래서 이것을 위해 루프가 필요하지 않습니다 ....
그런 다음 만들기 전에
- 실행중인 거래 확인
- 이름이 "tomato"로 시작하는 개체가 이미 존재하는지 확인하고 존재하는 경우 이전 개체를 삭제해야 하는지 확인합니다.
이름을 만드는 순간
linenamehigh = "tomato " + TimeToStr ( Time [ 0 ], TIME_DATE | TIME_MINUTES )
개체 수 확인
//---- int i, ot= ObjectsTotal ()- 1 ; string id; //---- for (i=ot;i>= 0 ;i--) {id= ObjectName (i); if ( StringSubstr (id, 0 , 7 )== "tomato " ) { //check when created if ( StringSubstr (id, 8 ,...)< TimeToStr ( Time [ 24 ],........)){ ObjectDelete (id);} } if ( StringSubstr (id, 0 , 6 )== "olive " ) { //..... } }
링크를 클릭하고 무슨 일이 일어나는지 이해하려고
코드 내부에 .......가 있는 곳은 직접 입력할 수 있습니다.
달성하려는 것을 지정할 수 있습니까 ?
최종 아이디어:
신호 1 = K%>75이고 bar[1]의 고점과 현재 bar[0]이 마지막 36 bar(High_point)의 최고 고점보다 작을 때
High_point에 토마토 선 그리기
토마토 선이 이미 그려진 경우 선이 삭제될 때까지 더 이상 선을 그리지 않습니다.
토마토 라인을 사용하여 거래가 시작되면 라인을 삭제하십시오.
거래가 열려 있지 않고 High_point 를 결정한 막대에서 96 막대가 지난 경우 해당 라인을 삭제합니다.
이제 각 신호 1에 한 줄만 표시됩니다( 인쇄 기능 은 각 유효한 틱마다 36개의 "토마토 ON"을 보냅니다). 따라서 토마토 줄을 찾은 후 루프를 중지하도록 코드에 알려야 합니다. 나는 스파게티를 요리하고 그것을 어떻게 써야할지 생각합니다 ... 내 머리 속에 이것이 다음 단계가되어야합니다 .... 내가 뭔가를 놓치고 있지 않기를 바랍니다. :)
내가 올바른 길을 가고 있습니까? 당신의 도움과 조언에 감사드립니다.
지금까지의 코드:
//+------------------------------------------------------------------+ //| 1expert.mq4 | //| ant | //| | //+------------------------------------------------------------------+ #property copyright "ant" #property link "" #property indicator_chart_window extern int Kperiod = 80 ; extern int Dperiod = 30 ; extern int Stochshift = 30 ; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return ( 0 ); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return ( 0 ); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double stoch; stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 ); double high_price,low_price; int high_nr,low_nr; high_nr= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 ); high_price= High [high_nr]; low_nr= iLowest ( NULL , 0 , MODE_LOW , 34 , 2 ); low_price= Low [low_nr]; datetime H= Time [high_nr]; datetime L= Time [low_nr]; ///////////////////////////////////////////////////////////////////////////////// for (high_nr= 2 ;high_nr< 36 ;high_nr++) { if ( Bid <high_price && High [ 0 ]<high_price && High [ 1 ]<high_price && stoch> 75 ) { ObjectCreate ( "tomato" +H, OBJ_TREND , 0 ,H,high_price, Time [ 0 ],high_price); ObjectSet ( "tomato" +H, OBJPROP_COLOR ,Tomato); Print ( "tomato ON" +H); } } /////////////////////////////////////////////////////////////////////////////// for (low_nr= 2 ;low_nr< 36 ;low_nr++) { if ( Bid >low_price && Low [ 0 ]>low_price && Low [ 1 ]>low_price && stoch< 25 ) { ObjectCreate ( "olive" +L, OBJ_TREND , 0 ,L,low_price, Time [ 0 ],low_price); ObjectSet ( "olive" +L, OBJPROP_COLOR ,Olive); Print ( "olive ON" +low_price); } } //---- //---- return ( 0 ); }
double high_price,low_price; int high_nr,low_nr; high_nr= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 ); high_price= High [high_nr]; low_nr= iLowest ( NULL , 0 , MODE_LOW , 34 , 2 ); low_price= Low [low_nr]; datetime H= Time [high_nr]; datetime L= Time [low_nr]; if (stoch > 75 && High [ 1 ] < High [high_nr] && High [ 0 ] < High [high_nr]) { ObjectCreate ( "tomato" +H, OBJ_TREND , 0 , Time [H],high_price, Time [ 0 ], High [ 0 ]); ObjectSet ( "tomato" +H, OBJPROP_COLOR ,Tomato); Print ( "tomato ON" +H); }
BTW 그것을하기 위해 라인이 필요하지 않습니다
cichichan에 대해 이야기하는 경우는 거의 발생하지 않으므로 인덱스를 사용하여 수행하는 작업을 볼 수 있습니다.
http://charts.mql5.com/3/799/eurusd-h1-fxpro-financial-services.png
arrow_down이 표시되지 않습니다. 어딘가에 버그가 있습니다.
//+------------------------------------------------------------------+ //| lexpert.mq4 | //| | //+------------------------------------------------------------------+ #property copyright "ant" #property link "" #property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 YellowGreen #property indicator_color2 Coral extern int Kperiod = 80 ; extern int Dperiod = 30 ; extern int Stochshift = 30 ; double arrow_up[]; double arrow_down[]; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //-------- SetIndexBuffer ( 0 , arrow_up ); SetIndexStyle ( 0 , DRAW_ARROW , STYLE_SOLID , 2 ); SetIndexArrow ( 0 , 233 ); SetIndexEmptyValue ( 0 , 0.0 ); //-------- SetIndexBuffer ( 1 ,arrow_down); SetIndexStyle ( 1 , DRAW_ARROW , STYLE_SOLID , 2 ); SetIndexArrow ( 1 , 234 ); SetIndexEmptyValue ( 1 , 0.0 ); //---- return ( 0 ); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return ( 0 ); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars= IndicatorCounted (); //---- last counted bar will be recounted if (counted_bars> 0 ) counted_bars--; limit= Bars -counted_bars; //---- macd counted in the 1-st additional buffer for ( int i=limit; i>= 0 ; i--) { double stoch_1, stoch_2; stoch_2= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN ,i+ 2 ); stoch_1= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN ,i+ 1 ); double high_price,low_price; int high_nr,low_nr; high_nr= iHighest ( NULL , 0 , MODE_HIGH , 34 ,i+ 2 ); high_price= High [high_nr]; low_nr= iLowest ( NULL , 0 , MODE_LOW , 34 ,i+ 2 ); low_price= Low [low_nr]; datetime H= Time [high_nr]; datetime L= Time [low_nr]; ///////////////////////////////////////////////////////////////////////////////// if ( Bid <high_price && High [i]<high_price && High [i+ 1 ]<high_price && stoch_2< 75 && stoch_1 > 75 ) { arrow_down[i] = High [i] + 5 * iATR ( NULL , 0 , 200 ,i); ObjectCreate ( "tomato" +H, OBJ_TREND , 0 ,H,high_price, Time [i],high_price); ObjectSet ( "tomato" +H, OBJPROP_RAY_RIGHT , false ); ObjectSet ( "tomato" +H, OBJPROP_WIDTH , 5 ); ObjectSet ( "tomato" +H, OBJPROP_COLOR ,Tomato); Print ( "tomato ON" +H); } else arrow_down[i] = 0.0 ; /////////////////////////////////////////////////////////////////////////////// if ( Bid >low_price && Low [i]>low_price && Low [i+ 1 ]>low_price && stoch_2> 25 && stoch_1 < 25 ) { arrow_up[i] = Low [i] - 5 * iATR ( NULL , 0 , 200 ,i); ObjectCreate ( "olive" +L, OBJ_TREND , 0 ,L,low_price, Time [i],low_price); ObjectSet ( "olive" +L, OBJPROP_COLOR , Yellow ); ObjectSet ( "olive" +L, OBJPROP_WIDTH , 5 ); ObjectSet ( "olive" +L, OBJPROP_RAY_RIGHT , false ); Print ( "olive ON" +low_price); } else arrow_up[i] = 0.0 ; //---- } //---- return ( 0 ); }
여보세요
나는 이것을 코드로 작성하려고 시도했다.
stochastic(80,30,30)의 K% 선 > 75일 때 36개 막대(34,shift 2)를 되돌아보고 가장 높은 고점에서 현재 막대까지 H_line "토마토"를 그립니다.
K% line of stochastic(80,30,30) < 25일 때 36개 막대(34,shift 2)를 되돌아보고 가장 낮은 저점에서 현재 막대까지 H_line "올리브"를 그립니다.
내가 이것을 실행할 때 나는 토마토와 올리브에 대한 첫 번째 설정을 얻습니다. 그런 다음 저널에 "토마토 켜기"가 다른 가격 lvl을 얻더라도 차트에 새 토마토 라인이 표시되지 않습니다. 올리브도 마찬가지.
ea의 아이디어는 이 라인을 사용하여 거래를 시작하는 것입니다. 그래서 내가 마침내 원하는 것은 이것을 갖는 것입니다.
K%>75일 때
가장 높은 선을 그립니다 (지난 36개 막대).
선이 켜져 있으면 선이 삭제될 때까지 더 이상 선을 그리지 않습니다.
거래가 열려 있으면 라인을 삭제하십시오.
열려 있는 거래가 없고 k%>75로 결정된 막대에서 24개의 막대가 지난 경우에도 해당 라인을 삭제합니다.
:)
내 구멍 생활에서 작성한 내 첫 번째 코드와 마찬가지로 pls는 문제를 보는 방법을 가르쳐줍니다.
감사합니다