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

 

Söyle bana, iki EMA (beş günlük / dak. ve maks.,) arasındaki farkı artırırken maksimum EMA'da uzun satış yaparken ve minimum EMA'da şort satın alırken nasıl reçete yazabilirim?

İki EMA arasındaki fark olarak Global değişkenlerin başlığında " Rastvor " kullanıyorum.

Bu kod ticaret kriterlerinde nasıl yazılır?

 
Fox_RM :

Onlar. Vol_Arr[] anladığım kadarıyla global bir dizi olarak başlatılmalı.


Soru elbette noob, AMA.

1. O zaman göstergedeki hacimler neden doğru görüntüleniyor?

2. Sayarken, Vol_Arr[] 'a değil, AOBuffer3[]'e başvuruyorum.

Teşekkür ederim!


Bir diziyi (arabellek değil) bildirirken, en azından boyutunu açıkça belirtmelisiniz.
 
Fox_RM :

Onlar. Vol_Arr[] anladığım kadarıyla global bir dizi olarak başlatılmalı.


Soru elbette noob, AMA.

1. O zaman göstergedeki hacimler neden doğru görüntüleniyor?

2. Sayarken, Vol_Arr[] 'a değil, AOBuffer3[]'e başvuruyorum.

Teşekkür ederim!

1.
 if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;
}
Her iki dizi de sizin kullandığınız ve gösterge arabellekleriyle ilişkilendirilir - yani, bunlar için bellek ayrılır (dolaylı olarak da olsa)
 SetIndexBuffer ( 0 ,AOBuffer3);
   SetIndexStyle( 0 ,Show_AOLine_2);
   SetIndexLabel( 0 , "basic line" );   

   SetIndexBuffer ( 1 ,ExtMapBuffer1);

belirtilen dizi altında ( Vol_Arr[]) ne statik ne de dinamik olarak bellek ayırmazsınız.

2. Koddan anladığım kadarıyla AOBuffer3[] dizisinde hacimleri değil MA farkını hesaplıyorsunuz

   for ( int i= 0 ; i<limit; i++)
   {
     
 //---- AO_fan basic line + Volumes
     
      AOBuffer3[i]= iMA ( NULL , 0 ,EMA, 0 , MODE_SMA , PRICE_MEDIAN ,i)- iMA ( NULL , 0 ,SlowEMA3, 0 , MODE_SMA , PRICE_MEDIAN ,i);
if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;
}

Hacimler ExtMapBuffer1'de dikkate alınır

Vol_Arr[] öğesini global olarak veya statik bir değiştirici ile başlatabilirsiniz - aralarından seçim yapmak için, ancak bellek her durumda tahsis edilmeli veya önceki iki dizi gibi gösterge arabelleğiyle ilişkilendirilmelidir - birçok seçenek vardır.

 
VladislavVG :
1. Her iki dizi de sizin kullandığınız ve gösterge arabellekleriyle ilişkilendirilir - yani, bunlar için bellek ayrılır (dolaylı olarak da olsa)

......

Vladislav, kodu tekrar gözden geçirdi. Vol_Arr[] içeren kodun bir kısmı göstergenin eski sürümünden kaldı, kaldırdım.

Hatanın hala kodun bu bölümünde olduğunu düşünüyorum, ama nerede olduğunu anlamıyorum! Kodun bu bölümünü daha ayrıntılı olarak yorumladı.

 
   //-- Поиск High & Time  
   if (AOBuffer3[i]>= 0 ) Если Awesome больше нуля
  {
  prhgh_s = High[i];                                            // -----
   if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}  --- Ищу самый высокий бар и определяю время этого бара // -- пока значение  tmhgh = 0 
  }   
   
   //-- Поиск Low & Time  
   if (AOBuffer3[i]<= 0 ) Если Awesome меньше нуля
  {
  prlw_s = Low[i];                                          // -----
   if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}    --- Ищу самый низкий бар и определяю время этого бара // -- пока значение  tmlw = 0
  } 
   // -- Пересчет баров от High до Low
   int colbr = iBarShift( NULL , 0 ,tmhgh)-iBarShift( NULL , 0 ,tmlw);  //-- Здесь считаю общее количество баров от наименьшего до наибольшего значения // -- пока значение  colbr = 0
  
   int shift=iBarShift( NULL , 0 ,tmlw); // -- Это точка отсчета
  
 for (i= 0 ; i<=colbr; i++)
{VLUP += MathAbs (iVolume( NULL , 0 , shift+i));} //-- Значению VLUP суммируем все объемы начиная от самого низкого бара до самого высокого бара // -- Значение  VLUP = 47

İncir. 2

 
Fox_RM :

Vladislav, kodu tekrar gözden geçirdi. Vol_Arr[] içeren kodun bir kısmı göstergenin eski sürümünden kaldı, kaldırdım.

Hatanın hala kodun bu bölümünde olduğunu düşünüyorum, ama nerede olduğunu anlamıyorum! Kodun bu bölümünü daha ayrıntılı olarak yorumladı.

Tamam, şimdi çalışan kodun tamamını tekrar gönderin - göreceğiz.
 

İşte burada:

#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Red
#property  indicator_color2  SteelBlue
#property  indicator_width1  2

//---- basic fan indicator parameters

extern bool Show_AOLine_2=true;
extern int SlowEMA3=34;
extern int EMA=2;
extern bool Show_Volume=true;
extern double coaf=1.5;
extern bool Show_Vol_line=true;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];

double VLUP;
   double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s;
    datetime tmhgh, tmlw;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
  string name_ind = "Awesome_super_volumes";
   IndicatorShortName("Awesome_super_volumes");
   
   
//---- AO_fan line 2 (basic)
   if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; }
   else 
    {Show_AOLine_2=DRAW_NONE; }
   SetIndexBuffer(0,AOBuffer3);
   SetIndexStyle(0,Show_AOLine_2);
   SetIndexLabel(0,"basic line");   

   SetIndexBuffer(1,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexLabel(1,"Volume");
   
    //---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
  
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

//---- AO_fan line 2 (basic) buffer
   for(int i=0; i<limit; i++)
   {
     
 //---- AO_fan basic line + Volumes
     
      AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
}
  }
   
  //-- Поиск High & Time  
  if (AOBuffer3[i]>=0) //Если Awesome больше нуля
  {
  prhgh_s = High[i];                                            // -----
  if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}  //--- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0
  }   
   
  //-- Поиск Low & Time  
  if (AOBuffer3[i]<=0) //Если Awesome меньше нуля
  {
  prlw_s = Low[i];                                          // -----
  if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}   // --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0
  } 
  // -- Пересчет баров от High до Low
  int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw);  //-- Здесь считаю общее количество баров от наименьшего до наибольшего значения // -- пока значение colbr = 0
  
  int shift=iBarShift(NULL,0,tmlw); // -- Это точка отсчета
  
 for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));} //-- Значению VLUP суммируем все объемы начиная от самого низкого бара до самого высокого бара // -- Значение VLUP = 47
       
  SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black);     
 
  SetText2("Волна1",DoubleToStr(VLUP,0),980,10,Gray,10); 
  SetText2("Волна2",TimeToStr(tmlw,0),980,25,Gray,10); 
  SetText2("Волна3",TimeToStr(tmhgh,0),980,40,Gray,10);
  SetText2("Волна4",DoubleToStr(colbr,0),980,55,Gray,10);  
  
  
      
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
 {
 // if (ObjectFind(name)!=-1) ObjectDelete(name);
  ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
  ObjectSetText(name, Vl, 10, "Times New Roman", c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR, c); 
  }
  
  void SetText2(string name, string text, int xdist, int ydist, color c, int size) 
 {                                                                                    
  ObjectCreate(name,OBJ_LABEL,0,0,0,0,0);     
  ObjectSet(name, OBJPROP_XDISTANCE, xdist);
  ObjectSet(name, OBJPROP_YDISTANCE, ydist);    
  ObjectSetText(name,text,7,"Arial Black",c);
 }

Tekrar teşekkürler!

 
Fox_RM :

İşte burada:



hazırlıksız:

   for ( int i= 0 ; i<limit; i++)
   {
     
 //---- AO_fan basic line + Volumes
     
      AOBuffer3[i]= iMA ( NULL , 0 ,EMA, 0 , MODE_SMA , PRICE_MEDIAN ,i)- iMA ( NULL , 0 ,SlowEMA3, 0 , MODE_SMA , PRICE_MEDIAN ,i);
if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;
}
  } // здесь цикл закончился
   
    //-- Поиск High & Time  
    if (AOBuffer3[ i ]>= 0 ) //Если Awesome больше нуля
  {
  prhgh_s = High[ i ];                                             // -----
   if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[ i ];}   //--- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0
  }   
   
   //-- Поиск Low & Time  
   if (AOBuffer3[ i ]<= 0 ) //Если Awesome меньше нуля
  {
  prlw_s = Low[ i ];                                           // -----
   if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[ i ];}   // --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0
  } 

Seçilen parça döngünün dışında ve i döngü sayacını kullanıyor - mantıkta veya uygulamada bir sorun var

 
hoz :

CSV dosyaları biçimindeki rakamlara neden ihtiyacınız var?

Tanıma algoritmalarını test etmek ve hata ayıklamak için gereklidir.

saat :

Onları anlamak için kendin yaz, başkasınınkini alma.

Tam olarak ne yazmalı? Grafikteki rakamları kendiniz işaretleyin ve ilgili tarih parçalarını dışa aktarın mı? Bu çözüm şu ana kadarki ilk çözüm, ancak yine de birinin bunu zaten yaptığını umuyorum. Sonuçta bu sadece rutin bir iş.

saat :

Daha fazla, daha iyi anlamına gelmez!

Kabul etmeme izin ver. Test seti ne kadar büyük olursa, programın sonucu istatistiksel olarak o kadar güvenilir olacaktır.


ps Soru hala geçerli. ( Bu gönderideki soruya bakın )

 

Merhaba!!!

Lütfen bana mevcut MA'nın maksimum değerinde uzun pozisyonu kapatmak için hangi kodun gerekli olduğunu söyleyin.

Aşağıda gerçek ticaret kriterleri ve net olmayan kırmızı ile vurgulanmıştır.

Programa pozisyondan çıkmasını nasıl söyleyeceği de net değil,

MA1 ve MA2 arasındaki farkı artırdıktan sonra?

//------------------------------------------------ --------------- 5 --
// Ticaret kriterleri
MA_1_t=iMA(NULL,0, Period_MA_1 ,0,MODE_EMA,PRICE_HIGH,1); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,1); // MA_2

if ( iHigh (Symbol(),Period(),0) >= MA_1_t) //
{
Opn_S=doğru;
}
if ( iLow (Symbol(),Period(),0) <= MA_2_t) //
{
Opn_B=doğru; // Kriterler açık. satın almak
}
if ( uzunluğu bugünün maksimum iMA'sında kapatmak için hangi kod gereklidir??? )
{
Cls_B=doğru;
}
//------------------------------------------------ --------------- 6 --

 
VladislavVG :


hazırlıksız:

Seçilen parça döngünün dışında ve i döngü sayacını kullanıyor - mantıkta veya uygulamada bir sorun var


Teşekkürler Vladislav! Bir şeyler olmaya başladı. Ama neden böyle? :(

pirinç3

Başka bir soru, gösterge penceresinde metin etiketlerinin neden görüntülenmediğidir?

 // -- Процедура
void SetText( string name, string Vl, datetime t1, double p1, color c)
 {
 // if (ObjectFind(name)!=-1) ObjectDelete(name);
   ObjectCreate (name, OBJ_TEXT ,WindowFind( "Awesome_super_volumes" ), 0 , 0 , 0 , 0 );
  ObjectSetText(name, Vl, 10 , "Times New Roman" , c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR , c); 
  }
// -- Обращение
SetText( "Awesome_super_volumes" , DoubleToStr(VLUP, 0 ), tmhgh, dist, Black);