[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 134

 
Roll :

BÜYÜK TEŞEKKÜRLER!

Sürümünüzde gösterge çalışıyor!

Aynı zamanda, üç küçük problem ortaya çıktı, onları MQL4 ders kitabını kullanarak çözmeye çalıştım, gösterge örneklerini gözden geçirdim, ancak hiçbir şey çıkmadı.

Arzu, zaman ve ruh haliniz varsa, NEDENİ bulmama yardım edin:

1. Göstergeyi ayarlarken, satır 0 (sıfır) değerini alır ve yalnızca ilk tikin gelmesiyle en üstteki değişkenin değerini alır veya gösterge parametreleri penceresini açmanız ve hemen kapatmanız gerekir;

2. init() içinde bir satır olmasına rağmen üst parametre 4. karaktere kadar hesaplanır.

GöstergeDigits(Rakam+1);

ve çizgi

top=WindowPriceMax(win_idx);

onunla değiştirdim

top=NormalizeDouble((WindowPriceMax(win_idx))),Rakamlar+1);

yardımcı olmuyor! Ve gösterge penceresinin ölçeğinin sayısal değerleri 5 basamaklıdır.

3. Göstergenin kaldırılması ile yorum grafikten kaldırılmaz.



kod

--------

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],
ExtMapBuffer2[];
//--------------------------------
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min_v2");

IndicatorDigits(Digits+1);

return(0);
}
//--------------------------------
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),limit,win_idx;
double top;

if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
win_idx=WindowFind("MACD_max-min_v2");

for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
}

// top=WindowPriceMax(win_idx);
top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);
Comment( "\n"," top = ",top);
ObjectDelete("max");

if(ObjectFind("max")!=win_idx)
{
ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
}

return(0);
}
//+------------------------------------------------------------------+


Dosyalar:
 
MK07 :

Teknik düzenleme - danışmanlarınızın yaptığı gibi , kodu yapıştırmak için üst çubuktaki SRC düğmesini kullanın. Okumak çok daha kolay olacak.

not
Yorum dizesini temizlemek için deinit() içine Comment(""); ekleyin.
 
granit77 :
Teknik düzenleme - danışmanlarınızın yaptığı gibi, kodu yapıştırmak için üst çubuktaki SRC düğmesini kullanın. Okumak çok daha kolay olacak.

not
Yorum dizesini temizlemek için deinit() içine Comment(""); ekleyin.
Bilgi için teşekkürler. Bu foruma ilk kez geliyorum. Kod parçacığı için özel bir TEŞEKKÜR EDERİM.
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){Comment("");return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
  ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}
  Comment( "\n"," top = ",DoubleToStr(top,5));return(0);}
//+------------------------------------------------------------------+
 
https://docs.mql4.com/ru/common/Yorum
geçersiz Yorum ( ...)
İşlev, grafiğin sol üst köşesinde kullanıcı tanımlı bir yorum görüntüler. Parametreler herhangi bir tipte olabilir. Parametre sayısı 64'ü geçemez.
Diziler, Comment() işlevine geçirilemez. Diziler, eleman eleman yazdırılmalıdır.
Çift veri, noktadan sonra 4 ondalık basamakla verilir . Sayıları daha hassas bir şekilde görüntülemek için DoubleToStr() işlevini kullanmanız gerekir.
bool, datetime ve color türleri sayı olarak yazdırılacaktır.
Datetime verilerini bir dize olarak çıkarmak için TimeToStr() işlevini kullanın.

Çıktı bilgilerini birden çok satıra ayırmak için yeni satır karakteri "\n" veya "\r\n" kullanabilirsiniz.
Alert() ve Print() işlevlerine de bakın .
 
Bana formülü nasıl yazacağımı söyle:
Fiyat yatay çizgiyi geçti....
Ve bu çizgi nasıl tarif edilmelidir?
 
Roll :
Bilim için teşekkürler.
 

Merhaba,

İşte yaşadığım sorun.

PERIOD_H1 üzerinde çalışın.

Saatin sonunda kapatmak için şunu yapıyorum:

   for (j = OrdersTotal ()- 1 ; j >= 0 ; j--){ 
       if ( OrderSelect (j, SELECT_BY_POS, MODE_TRADES))
           if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber){
            OpenTime= OrderOpenTime ();          
           if ( OrderType () == OP_BUY){
             if ( TimeCurrent ()>Time[ 0 ]+ 3580 ){ 
             OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble (Bid, Digits ), 0 , Red );}
             }
           else 
           if ( OrderType () == OP_SELL){
             if ( TimeCurrent ()>Time[ 0 ]+ 3580 ){
             OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble (Ask, Digits ), 0 , Blue );}
             }
           }
         }
Saat başında bir pozisyon açmak için bunu yapıyorum
   if ( TimeCurrent ()<Time[ 0 ]+ 3500 && HaveBuy==false && HaveSell==false)
     if (Ask <= EnBuy && IsFreeLevel==true){
          ticket = OrderSend ( Symbol (),OP_BUY,Lot, NormalizeDouble (Ask, Digits ), 0 , 0 ,forecast- 5 *MyPoint, "" ,MagicNumber, 0 , Blue );
         }
     if (Bid >= EnSel && IsFreeLevel==true){
          ticket = OrderSend ( Symbol (),OP_SELL,Lot, NormalizeDouble (Bid, Digits ), 0 , 0 ,forecast+ 5 *MyPoint, "" ,MagicNumber, 0 , Red );
         }

Ama testte böyle çıkıyor

Anlayamıyorum, nerede yanlış yapıyorum?

Her zaman böyle olmuyor ama oluyor.

Cevap verene teşekkürler :)

 
alsu :
Bundan bahsetmiyorum, ama uzmanın asıldığı yerin ne farkı var? Doğru yazılmışsa, nerede asılı olduğu önemli değil: en azından Moğol borsa tablosuna asın, ancak içeride 1 dakika boyunca eurodolar üzerinde çalışacak şekilde ayarlanmışsa, öyle yapacaktır. Ve programlamak hiç de zor değil, kural olarak sadece birkaç satırı değiştirin.

Açıklama için çok teşekkürler!

Tek endişem, her dakika çubuğunun açılışında test cihazında bir dakikalık değişikliklerin simüle edilmesidir.

Open[0]'ı iOpen (NULL,1,0) olarak değiştirmeye çalışacağım ve bir dakikalık çubuğun açılışını kontrol etmek için bir işlev ekleyeceğim.

Kodu düzelttiğim birkaç dakika geçti, M5'teki test cihazında denedim ve bu durumda test cihazının kayıtlı olmalarına rağmen 1 dakikalık çubukları açmadığından ve yalnızca her 5 dakikada bir değiştirdiğinden emin oldum. korkmak. Tüm kenelerdeki modda, biraz daha iyi, çünkü daha sık değiştirdim. Ancak M1'de yalnızca bar açılışında, hem Open[0] hem de iOpen(NULL,1,0) ile aynı şekilde çalışır, bunun için size yine de minnettarım!

Artık her zaman yeşil iOpen kullanacağım çünkü. Kırmızı Açık olmadan yapabileceğinizi görüyorum. Kârın yeşil rengi kırmızıdan daha hoştur. (:))

 
mario065 :

Merhaba,

İşte yaşadığım sorun.

PERIOD_H1 üzerinde çalışın.

Saatin sonunda kapatmak için şunu yapıyorum:

Saat başında bir pozisyon açmak için bunu yapıyorum
Ama testte böyle çıkıyor

Anlayamıyorum, nerede yanlış yapıyorum?

Her zaman böyle olmuyor ama anları var.

Cevap verene teşekkürler :)


Bir arkadaş önerdi:
TimeCurrent() yerine

TimeSeconds(TimeCurrent())

Ve işe yaradı.

Neden: