지난 36개 고점 중 최고 고점에 H_line 그리기

 

여보세요

나는 이것을 코드로 작성하려고 시도했다.

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 "올리브"를 그립니다.

 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];

/////////////////////////////////////////////////////////////////////////////////
for (high_nr= 2 ;high_nr< 36 ;high_nr++)
{

   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);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for (low_nr= 2 ;low_nr< 36 ;low_nr++)
{
if ( Bid >low_price && stoch< 25 )
   {
   ObjectCreate ( "olive" , OBJ_TREND , 0 , Time [low_nr],low_price, Time [ 0 ],low_price);
   ObjectSet ( "olive" , OBJPROP_COLOR ,Olive);
   Print ( "olive ON" +low_price);
   }
}   
   
   
//----
   
//----
   return ( 0 );
  }

내가 이것을 실행할 때 나는 토마토와 올리브에 대한 첫 번째 설정을 얻습니다. 그런 다음 저널에 "토마토 켜기"가 다른 가격 lvl을 얻더라도 차트에 새 토마토 라인이 표시되지 않습니다. 올리브도 마찬가지.

ea의 아이디어는 이 라인을 사용하여 거래를 시작하는 것입니다. 그래서 내가 마침내 원하는 것은 이것을 갖는 것입니다.

K%>75일 때

가장 높은 선을 그립니다 (지난 36개 막대).

선이 켜져 있으면 선이 삭제될 때까지 더 이상 선을 그리지 않습니다.

거래가 열려 있으면 라인을 삭제하십시오.

열려 있는 거래가 없고 k%>75로 결정된 막대에서 24개의 막대가 지난 경우에도 해당 라인을 삭제합니다.

:)

내 구멍 생활에서 작성한 내 첫 번째 코드와 마찬가지로 pls는 문제를 보는 방법을 가르쳐줍니다.

감사합니다

 

다른 이름이 필요합니다

      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을 사용하면 고유합니다.

 
달성하려는 것을 지정할 있습니까 ?
 
cichichan :

여보세요

나는 이것을 코드로 작성하려고 시도했다.

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를 사용한 적이 있습니까 ??? iHighestiLowest 작업 방법 보기

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 " )
         {
         //.....
         }
    }

링크를 클릭하고 무슨 일이 일어나는지 이해하려고

코드 내부에 .......가 있는 곳은 직접 입력할 수 있습니다.

 
qjol :
달성하려는 것을 지정할 있습니까 ?


최종 아이디어:

신호 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 );
  }
 

나는 deVries 게시물과 같은 시간에 게시했습니다.

읽으러 갑니다 :)

 
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 );
  }
 
n 지표가 n EA가 아닌 경우