Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 876

 
artmedia70 :
Dizinin boyutu sıfırdır. ArrayResize()'ı unutmayınız veya hemen istenen dizi boyutunu ayarlayınız.
Teşekkürler, farklı yaptım, göstergede ArrayMaximum() öğesini buldum ve değeri iCustom aracılığıyla EA'ya ilettim :)
 
Hepinize iyi günler! Tırnakları özel bir şekilde hesaplayan ve gerekli katsayılara sahip bir dosya oluşturan harici bir DLL'den gelen çağrıları kullanan bir komut dosyası var, komut dosyasını bir zamanlamaya göre çalıştırmanın bir yolu var mı? Her gün belirli bir saatte çalışmasına ihtiyacım var mı?
 

Merhaba,

Resimde gösterilen:

İlk pencere Hacim göstergesidir, Para Akışı Endeksini (10) en üste koyun.

Ayrı bir gösterge yaptım, yine Hacim aldığım, Hacim'den hareket etmeyi yeniden hesapladığım ve ilk penceredeki gibi yapmaya çalıştığım - %25, %50, %75.

Ama bunu yapma şekli pek iyi değildi.

Bu sorunla karşılaşan varsa lütfen paylaşsın.

teşekkürler

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0

#property indicator_width1 2
#property indicator_width2 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Yellow

extern int MAPeriod = 30;
double     volum[],ma[];
//+------------------------------------------------------------------+
int init(){
    int bars_count=WindowBarsPerChart(),volh;
    int bar=WindowFirstVisibleBar();
    volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)];
    SetIndexBuffer(0,volum);
    SetIndexBuffer(1,ma);
    SetIndexStyle(0,DRAW_HISTOGRAM);
    SetIndexStyle(1,DRAW_LINE);
    SetLevelValue (0,   volh*1.05); 
    SetLevelValue (1, ((volh*1.05)/100)*75.0); 
    SetLevelValue (2, ((volh*1.05)/100)*50.0);
    SetLevelValue (3, ((volh*1.05)/100)*25.0); 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
/*int start(){
    int limit;
        limit = Bars-IndicatorCounted()-1;
    for(int i=limit;i>=0;i--){
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
       }
   return(0);
  }*/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=rates_total-prev_calculated-1;
    if(i<0)
       i=0; 
    while(i>=0){
      if(i<rates_total-1)
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
        i--;
       }     
   return(rates_total);
  }
 
tara :
Eksi ikinci çubuktan bahsetti. Ve kısıtlamaların ortalama değeri hakkında. Alay etmek istiyor, imhenko. Ben gönderirdim ve sen - bildiğin gibi :)
Hala böyle bir ülke olmadığını bilmeyen bir tekrarlayıcı yedinci sınıf öğrencisi - Belarus, birinci sınıf öğrencilerine gitti ve etrafta dolaştı. Ve herhangi bir soruya sadece gönderir veya öğretir: derler ki, çalışmanız gerekir. Hangi şubedeyseniz kapının üstünü dikkatlice okuyunuz. Ben sadece alfabeyi öğreniyorum, bu yüzden fazla şişme, hala anlamıyorum.
 

Ve kötüllive ve artmedia70 çok teşekkürler. Sabrınız ve zamanınız için. Eminim bu sadece senin hakkındaki düşüncem değildir. Bu konuya yönelen herkes yardım ister ve esas olarak sizden alır. Teşekkürler\

 

merhaba sevgili profesyoneller uzun zamandır sizinle iletişim kurmuyoruz

Sonuç olarak, bir emrin açılmasıyla 2 hamlenin kesiştiği bir danışman var, orada rahatsız olmadılar

geçersizTicaret()

{ double ma_fast=ma( Period_ ,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))

{

if(sumSO>0 && !ClosePos(OP_SELL)) dönüş;

if(MO(OP_BUY,GetLot(),GetComment())==-1) dönüş;

if(!ModifyByTicket(T)) dönüşü;

NumbUp=0; NumbDn=0;

}

başka

vb..

yani, mesafenin bir kesişimi varsa, bir sipariş açın

Deyim yerindeyse son kavşağın zamanını bulabilecek bir koda ihtiyacım var..

şu anki andan geçmişte belirlenen zamana kadar, dönemin altına giren emirleri arardım ve bulamazsam bir emir açardım.

bu amaçlar için izleyici göstergelerinin kodunu yırttım, orada her şey açık görünüyor

ama eğrilerin kesişmesinden sonraki ilk çubuğun zamanını nasıl tespit edeceğimiz burada ve aşırı sağ olmasına rağmen net değil

Bir operatöre ihtiyacım olduğunu hissediyorum, ancak formüle edemiyorum

 
evillive :

Bu böyle yapılmaz. 3 tamponun tümü için iCustom çağrılır, her değer kendi değişkenine yazılır ve ardından bu değerlerle ihtiyacınız olanı yapın.

Bollinger bantları için, ikinci çubukta, referanstaki örneğe göre tıkaç gerekmez:

Teşekkür ederim.

Ancak, okuma yazma bilmediğim için, ders kitabını sürekli karıştırmam gerekiyor ve ortaya çıkardığım şey şu: özel bir gösterge bir programdır ... yazarın algoritmasına göre yazılmıştır. Kılavuz, iCustom'un belirtilen özel göstergenin değerini döndürdüğünü söylüyor.

Ancak herhangi bir özel (yani, anladığım kadarıyla, benim tarafımdan geliştirilen) göstergeler kullanmıyorum.

Standart, yani indikatör diyebilirsem değerleri, belirttiğim parametrelerle Hareketli Ortalama, Bollinger Bantları ve Stokastik Osilatör değerlerini çıkarmam gerekiyor. Tabii ki "dürtme yöntemi" ile yapıyorum - önce bulduğumu sonra uyguluyorum. Ancak önerdiğiniz seçenek bana da doğru gelmiyor.

Herhangi bir arabellek, dizi, döngü kullanmadan gerçekten bir çözüm yok mu? İçlerinde denizdeki bir parke taşı gibiyim - hemen boğuluyorum.

 
sannin :

merhaba sevgili profesyoneller uzun zamandır sizinle iletişim kurmuyoruz

Sonuç olarak, bir emrin açılmasıyla 2 hamlenin kesiştiği bir danışman var, orada rahatsız olmadılar

geçersizTicaret()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))

{

if(sumSO>0 && !ClosePos(OP_SELL)) dönüş;

if(MO(OP_BUY,GetLot(),GetComment())==-1) dönüş;

if(!ModifyByTicket(T)) dönüşü;

NumbUp=0; NumbDn=0;

}

başka

vb..

yani, mesafenin bir kesişimi varsa, bir sipariş açın

Deyim yerindeyse son kavşağın zamanını bulabilecek bir koda ihtiyacım var..

şu anki andan geçmişte belirlenen zamana kadar, dönemin altına giren emirleri arardım ve bulamazsam bir emir açardım.

bu amaçlar için, izleyici göstergelerinin kodunu parçaladım, orada her şey açık görünüyor

ama eğrilerin kesişmesinden sonraki ilk çubuğun zamanını nasıl tespit edeceğimiz burada ve aşırı sağ olmasına rağmen net değil

Bir operatöre ihtiyacım olduğunu hissediyorum, ancak formüle edemiyorum

Bu Uzman Danışman kavşaklarda çalışmaz. Burada kriter şudur: Hızlı MA yavaş olandan X pip daha yüksekse ve açık pozisyon yoksa piyasaya göre açın.

Bir kavşak aramak için, her zaman bir çift değer almanız gerekir - kavşaktan ÖNCE "hızlı / yavaş MA" ve kavşaktan SONRA "hızlı / yavaş MA", ne zaman yer değiştirdiklerini algılamak için tabiri caizse . yani

if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - hızlı MA, yavaş MA'yı 1. ve 2. çubuklar arasında aşağıdan yukarıya geçti.

Sonsuz bir döngüde, kesişim bulunana kadar sıfır çubuğundan arama yapın, bu X + 1 çubuk olacaktır ve X çubuğunun, yani kesişmeden sonraki en son çubuğun zamanına ihtiyacınız vardır.

 
rapid_minus :

Teşekkür ederim.

Ancak, okuma yazma bilmediğim için, ders kitabını sürekli karıştırmam gerekiyor ve ortaya çıkardığım şey şu: özel bir gösterge bir programdır ... yazarın algoritmasına göre yazılmıştır. Kılavuz, iCustom'un belirtilen özel göstergenin değerini döndürdüğünü söylüyor.

Ancak herhangi bir özel (yani, anladığım kadarıyla, benim tarafımdan geliştirilen) göstergeler kullanmıyorum.

Standart, yani indikatör diyebilirsem değerleri, belirttiğim parametrelerle Hareketli Ortalama, Bollinger Bantları ve Stokastik Osilatör değerlerini çıkarmam gerekiyor. Tabii ki "dürtme yöntemi" ile yapıyorum - önce bulduğumu sonra uyguluyorum. Ancak önerdiğiniz seçenek bana da doğru gelmiyor.

Tampon, dizi, döngü kullanmadan gerçekten bir çözüm yok mu? İçlerinde denizdeki bir parke taşı gibiyim - hemen boğuluyorum.

Bu doğru, Bollinger Bantlarını kullanırken iCustom'u aramanız gerekmez, ancak her gösterge satırı için ayrı ayrı iBands'i aramanız gerekir. Alternatif olarak, göstergeyi çağırmadan ("herhangi bir arabellek, dizi, döngü kullanmadan") - bu göstergeyi hesaplamak için algoritmayı Expert Advisor'da uygulayın ve gerektiğinde gerekli değeri okuyun (yalnızca istenen değeri okuyabilirsiniz, örneğin, sadece alt satırda). Ama yine de döngüler ve diziler olmadan çalışmaz.
 
sannin :

merhaba sevgili profesyoneller uzun zamandır sizinle iletişim kurmuyoruz

Sonuç olarak, bir emrin açılmasıyla 2 hamlenin kesiştiği bir danışman var, orada rahatsız olmadılar

geçersizTicaret()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt)))

{

if(sumSO>0 && !ClosePos(OP_SELL)) dönüş;

if(MO(OP_BUY,GetLot(),GetComment())==-1) dönüş;

if(!ModifyByTicket(T)) dönüşü;

NumbUp=0; NumbDn=0;

}

başka

vb..

yani, mesafenin bir kesişimi varsa, bir sipariş açın

Deyim yerindeyse son kavşağın zamanını bulabilecek bir koda ihtiyacım var..

şu anki andan geçmişte belirlenen zamana kadar, dönemin altına giren emirleri arardım ve bulamazsam bir emir açardım.

bu amaçlar için izleyici göstergelerinin kodunu yırttım, orada her şey açık görünüyor

ama eğrilerin kesişmesinden sonraki ilk çubuğun zamanını nasıl tespit edeceğimiz burada ve aşırı sağ olmasına rağmen net değil

Bir operatöre ihtiyacım olduğunu hissediyorum, ancak formüle edemiyorum

İşte 2 hamle geçtikten sonra kaç çubuğun nasıl ölçüleceğini gösterdiği bir örnek.
 datetime TimeStart = 0 ;
//+------------------------------------------------------------------+
int init(){ return ( 0 );}
int deinit(){ return ( 0 );}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int f;
   bool      cu1     = false ;
   bool      cu2     = false ;
   double    ma_1    = iMA ( NULL , 0 , 31 , 0 , MODE_SMA , PRICE_OPEN , 0 );
   double    ma1     = iMA ( NULL , 0 , 11 , 0 , MODE_SMA , PRICE_OPEN , 0 );
   double    ma_2    = iMA ( NULL , 0 , 31 , 0 , MODE_SMA , PRICE_OPEN , 1 );
   double    ma2     = iMA ( NULL , 0 , 11 , 0 , MODE_SMA , PRICE_OPEN , 1 );

   if (ma2<ma_2 && ma1>ma_1)
      TimeStart=Time[ 0 ]; 
   if (ma2>ma_2 && ma1<ma_1)
      TimeStart=Time[ 0 ];
   if (ma1>ma_1)
      cu1= true ;
   if (ma1<ma_1)
      cu2= true ;

   if (cu1== true || cu2== true )  
       int b1=iBarShift( Symbol (), PERIOD_H1 , TimeStart);      
       int b2=iBarShift( Symbol (), PERIOD_H1 , TimeCurrent ());

     for ( int j=b2;j<=b1;j++){
         f=b1-b2;
      }
       
   return ( 0 );
  }