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

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
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ı öğret.
teşekkür ederim