H_line'ı son 36 tepenin en yükseğine çekmek

 

Merhaba

kodda şunu yazmaya çalıştım:

stokastik(80,30,30) %K çizgisi > 75 olduğunda, 36 çubuk geriye bakın (34, shift 2) ve en yüksek yüksekten mevcut çubuğa bir H_line "domates" çizin.

stokastik(80,30,30) %K çizgisi < 25 olduğunda, 36 çubuk geriye bakın (34, shift 2) ve en düşük düşükten mevcut çubuğa bir H_line "zeytin" çizin.

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

Bunu çalıştırdığımda domates ve zeytin için ilk kurulumu alıyorum tamam, o zaman dergide "domates AÇIK" farklı fiyat lvl alsam bile, grafikte yeni domates satırı almıyorum. zeytin için de öyle.

ea fikri esnaf açmak için bu hatları kullanmaktır. yani sonunda isteyeceğim şey buna sahip olmak:

K%>75 olduğunda

en yüksek (son 36 bar) çizgiyi çizin .

hat AÇIK ise, hat silinene kadar daha fazla çizgi çizmeyin.

bir ticaret açıksa satırı silin

hiçbir işlem açık değilse ve k%>75 olarak belirlenen çubuktan 24 çubuk geçmişse satırı da silin

:)

delik hayatımda yazdığım ilk kodum olduğu gibi, lütfen bana soruna nasıl bakacağımı öğret.

teşekkür ederim

 

farklı isim lazım

      ObjectCreate ( "tomato " + high_nr , OBJ_TREND , 0 , Time [high_nr],high_price, Time [ 0 ],high_price);
       ObjectSet ( "tomato " + high_nr , OBJPROP_COLOR ,Tomato);
 

sonrasında

   ObjectCreate ( "olive" +low_nr, OBJ_TREND , 0 , Time [low_nr],low_price, Time [ 0 ],low_price);
   ObjectSet ( "olive" +low_nr, OBJPROP_COLOR ,Olive);

kod, aynı fiyata 25 satır koyar, ancak mum low_nr'den (ki bu her zaman 10'dur, stok <25'ten sonra gerçek sayının hangisi olduğu önemli değildir) değil, mum 35'ten başlar.

domates için de öyle.

:(

 

Bir nesne oluşturulduktan sonra aynı ada sahip başka bir nesne oluşturamazsınız.

Bu yüzden ilk kez iyi çalışıyor, ancak bundan sonra değil (orijinal kodunuzda)

Yalnızca ölçütleri karşılayan son satırın grafiğinizde gösterilmesini istiyorsanız, satırı init'te oluşturun ve ardından nesneyi yeni koordinatlarına taşımak için ObjectMove'u kullanın.

Tüm geçmiş satırların gösterilmesini istiyorsanız,

 ObjectCreate ( "tomato " + high_nr, OBJ_TREND , 0 , Time [high_nr],high_price, Time [ 0 ],high_price);

bar kayması high_nr olduğundan, muhtemelen daha sonra çoğaltılacaktır, bu nedenle düzgün çalışmayacaktır. Adında tarih saatini kullanın, ardından benzersiz olacaktır

 
neyi başarmaya çalıştığınızı belirtebilir misiniz?
 
cichichan :

Merhaba

kodda şunu yazmaya çalıştım:

stokastik(80,30,30) %K çizgisi > 75 olduğunda, 36 çubuk geriye bakın (34, shift 2) ve en yüksek yüksekten mevcut çubuğa bir H_line "domates" çizin.

stokastik(80,30,30) %K çizgisi < 25 olduğunda, 36 çubuk geriye bakın (34, shift 2) ve en düşük düşükten mevcut çubuğa bir H_line "zeytin" çizin.

Bunu çalıştırdığımda domates ve zeytin için ilk kurulumu alıyorum tamam, o zaman dergide "domates AÇIK" farklı fiyat lvl alsam bile, grafikte yeni domates satırı almıyorum. zeytin için de öyle.

ea fikri esnaf açmak için bu hatları kullanmaktır. yani sonunda isteyeceğim şey buna sahip olmak:

K%>75 olduğunda

en yüksek (son 36 bar) çizgiyi çizin.

hat AÇIK ise, hat silinene kadar daha fazla çizgi çizmeyin.

bir ticaret açıksa satırı silin

hiçbir işlem açık değilse ve k%>75 olarak belirlenen çubuktan 24 çubuk geçmişse satırı da silin

:)

delik hayatımda yazdığım ilk kodum olduğu gibi, lütfen bana soruna nasıl bakacağımı öğretin.

teşekkür ederim

Baştan başlıyoruz.....

 double stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );

0 çubuğunda stok, 0 değeri > 75'te bir yere gidebilir ve daha düşük bir değerle bitebilir

Bu durumda bir çizgi çizmesi gerekiyor mu? yoksa sadece yakın fiyat stokastik biter mi?

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

hiç iHighest ve/veya iLowest kullandınız mı ??? iHighest ve iLowest'in nasıl yapıldığını görün

if(stok > 75) high_price = Yüksek[iEn Yüksek(NULL,0,MODE_HIGH,......

if(stoch < 25) low_price = Low[iDüşük(........

//-----

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

bir kez oluşturmak yeterlidir .... döngü yalnızca { } içindekileri tekrar eder

yani bunun için döngüye gerek yok ....

sonra yaratmadan önce

  • çalışan işlemleri kontrol et
  • "domates" adında bir nesnenin zaten var olup olmadığını kontrol edin ve varsa, eskisini silmeniz gerekip gerekmediğini kontrol edin

beğendiğin bir isim anı yarat

linenamehigh =     "tomato  " + TimeToStr ( Time [ 0 ], TIME_DATE | TIME_MINUTES )

nesnelerinizi kontrol etmek

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

Bağlantılara tıklayın ve ne olduğunu anlamaya çalışın

kodun içinde ....... olan yerleri kendiniz doldurmayı deneyebilirsiniz

 
qjol :
neyi başarmaya çalıştığınızı belirtebilir misiniz?


son fikir:

Sinyal 1 = K%>75 ve bar[1] yüksekliği ve mevcut bar[0] daha küçük olduğunda, son 36 bardan en yüksek yüksek (High_point)

High_point'te domates çizgisi çiz

domates çizgisi zaten çizilmişse, çizgi silinene kadar başka çizgi çizmeyin.

domates hattı kullanılarak bir ticaret açıksa satırı silin

hiçbir işlem açık değilse ve High_point'i belirleyen çubuktan 96 çubuk geçmişse , satırı silin.

şimdi, her Sinyal 1'de yalnızca bir satır alıyorum ( Baskı işlevi , sanırım her geçerli onay işaretini 36 "domates AÇIK" olarak gönderiyor), bu yüzden koda, domates satırını bulduktan sonra döngüyü durdurmasını söylemem gerekiyor. gidip biraz spagetti pişiriyorum ve bunu nasıl yazacağımı düşünüyorum... kafamda bir sonraki adım bu olmalı... umarım bir şeyleri kaçırmamışımdır :)

doğru yolda mıyım? yardımın ve tavsiyen için çok teşekkürler

kod şimdiye kadar:

 //+------------------------------------------------------------------+
//|                                                      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 gönderisiyle aynı anda yayınladım.

okumaya gidiyorum :)

 
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 yapmak için bir satıra gerek yok

 

Cichichan hakkında konuştuğunuz durum nadiren gerçekleşecek, bu nedenle ne yaptığınızı görebilmeniz için bir dizin kullanmanız gerekir:

http://charts.mql5.com/3/799/eurusd-h1-fxpro-financial-services.png

arrow_down görünmüyor, bazı yerlerde bir hata var ....

 //+------------------------------------------------------------------+
//|                                                      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 );
  }
 
ffoorr onun n göstergesi değil EA