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

 

Ve başka bir soru.

(i=1; i<StartBar; i++) StartBar, daha yüksek zaman çerçevesinin (extern int = ... ; //W1, MN1) belirtilen bir bükülmesinin (harici int b= 2) olduğu çubuk olmak için nasıl yapılır )

 


Kod yazabilir misin?

 
gince :


(i=1; i<StartBar; i++) StartBar, daha yüksek zaman çerçevesinin (extern int = ... ; //W1, MN1) belirtilen bir bükülmesinin (harici int b= 2) olduğu çubuk olmak için nasıl yapılır )


değişiklik

Belirtilen zaman dilimlerinin iki köşesinin çakışması (haftalık ve aylık diyelim)

 

doğru olacak mı?

Koşul tf1 > tf2

datetime GetExtremumZZ_2TF_Bars(string sy="", int tf1=0, int tf2=0, int ne=0, int dp=12, int dv=5, int bs=3) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  double zz1, zz2, p1, p2;
  int    i, k1=iBars(sy, tf1), ke=0;
  int    j, k2=iBars(sy, tf2);
  datetime t;
  
  for (i=1; i<k1; i++) 
  {
    zz1=iCustom(sy, tf1, "ZigZag", dp, dv, bs, 0, i);
    if (zz1!=0) 
    {
      ke++;
      if (ke>ne) 
         {p1=zz1;}
    }
  }
  for (j=1; j<Bars; j++) 
  {
    zz2=iCustom(sy, tf2, "ZigZag", dp, dv, bs, 0, j);
    if (zz2!=0) 
    {
      p2=zz2;
      t=iTime(sy, tf2, j);
      if(p1==p2)
      return(t);
    }
  }
  return(0);
}
 

Soru şu. MQL4'te bulunan MQL 4 kitabında . topluluk "GlobalVariables" bölümünde "GV Değişkenlerinin Özellikleri" bölümünde şöyle yazıyor: "Bir GV değişkeni yalnızca double türünde olabilir". Aşağıda " GlobalVariableDel() işlevi " bölümünde, aşağıdaki içeriğe sahip globalvar.mq4 Uzman Danışman örneği bulunmaktadır:

 //--------------------------------------------------------------------
// globalvar.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int     Experts;                                 // Колич. экспертов
double Depo= 10000.0 ,                             // Заданный депозит
       Persent= 30 ,                               // Заданный процент     
       Money;                                   // Искомые средства
string Quantity= "GV_Quantity" ;                   // Имя GV-переменной
//--------------------------------------------------------------------
int init()                                       // Спец. функция init
  {
   Experts= GlobalVariableGet (Quantity);         // Получим тек. знач.
   Experts=Experts+ 1 ;                           // Колич. экспертов
   GlobalVariableSet (Quantity, Experts);         // Новое значение
   Money=Depo*Persent/ 100 /Experts;               // Средства для эксп.
   Alert ( "Для эксперта в окне " , Symbol (), " выделено " ,Money);
   return ;                                       // Выход из init()
  }
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int New_Experts= GlobalVariableGet (Quantity); // Новое колич. эксп.
   if (Experts!=New_Experts)                     // Если изменилось
     {
      Experts=New_Experts;                       // Теперь текущ. такое
      Money=Depo*Persent/ 100 /Experts;           // Новое знач. средств 
       Alert ( "Новое значение для эксперта " , Symbol (), ": " ,Money);
     }
   /*
   ...
   Здесь долен быть указан основной код эксперта,
   в котором используется значение переменной Money
   ...
   */
   return ;                                       // Выход из start()
  }
//--------------------------------------------------------------------
int deinit()                                     // Спец. ф-ия deinit
  {
   if (Experts == 1 )                             // Если эксперт один..
       GlobalVariableDel (Quantity);               //..удаляем GV-перемен
   else                                          // А иначе..
       GlobalVariableSet (Quantity, Experts- 1 );   //..уменьшаем на 1
   Alert ( "Эксперт выгружен из окна " , Symbol ()); // Сообщ. о выгрузке
   return ;                                       // Выход из deinit()
  }
//-------------------------------------------------------------------- 

Soru: Neden bu örnekte GV değişkenleri Expert ve New _ Expert , daha önce belirtildiği gibi, bu değişkenlerin double türünde olması gerekirken int türündedir ?

Yanıtınız için şimdiden teşekkür ederiz

 
gince :

doğru olacak mı?

Koşul tf1 > tf2


Yanlış bir şey mi var?

İlk döngüde, eski TF'de belirtilen bükümün fiyatını bulmaya çalışıyorum. Bulunan bükümü bulana kadar döngü. İkinci döngüyü daha genç bir zaman diliminde başlatıyorum, burada çubuklarla her bükümün fiyatını, kaç tanesinin grafikte olduğunu arıyorum ve bunu ilk döngüde bulunan fiyatla karşılaştırıyorum. Böyle bir fiyat bulursam, bu zaman diliminde bu virgülün bar süresini arttırırım.

Test cihazında 2000.01.01'den başlatıldı.

dergide ne var

2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1688
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2495
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1192
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2315
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1069
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3161
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2351
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4535
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.338
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.4249
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.416
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3353
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2658
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.3138
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0344
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1537
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0608
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.1216
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.079
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.2401
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0104
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 1.0917
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.8227
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p2= 0.9596
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: t1 1992.09.01 00:00
2012.06.17 10:29:39 2001.07.06 03:30 zz_date v3 EURUSD,M15: p1 1.4104

2000 yılında da aynı şey oldu, yani test döneminin başında.

Hata nerede. Ben zayıf bir programcıyım. Bir test programı yazmak istiyorum. Almak zor. Kimseye soramıyorum çünkü alınan verilere göre adım adım yapılıyor.

Bu yerde yardım edin. Ve son sayfada NewZZ() fonksiyonunu yazarken yardım istedim.

Birisi hataları düzeltir ve açıklarsa minnettar olurum.

 datetime GetExtremumZZ_2TF_Bars( string sy= "" , int tf1= 0 , int tf2= 0 , int ne= 0 , int dp= 12 , int dv= 5 , int bs= 3 ) 
{
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double zz1,  zz2, p1, p2;
   int     i, k1= iBars (sy, tf1), ke= 0 ;
   int     j;
   datetime t;
  
   for (i= 1 ; i<k1; i++) 
  {
    zz1= iCustom (sy, tf1, "ZigZag" , dp, dv, bs, 0 , i);
     if (zz1!= 0 ) 
    {
      ke++;
       if (ke>ne) 
         {p1=zz1; datetime t1= iTime (sy,tf1,i);}
    }
    
  }
   Print ( "                                  p1   " ,p1);
   Print ( "                                  t1   " , TimeToStr (t1,  TIME_DATE|TIME_MINUTES));
   for (j= 1 ; j< Bars ; j++) 
  {
    zz2= iCustom (sy, tf2, "ZigZag" , dp, dv, bs, 0 , j);
     if (zz2!= 0 ) 
    {
      p2=zz2;
       Print ( "p2=   " ,p2);
      t= iTime (sy, tf2, j);
       if (p1==p2)
      {
         Print ( "skaiciavimo pradzia nuo   " , TimeToStr (t, TIME_DATE|TIME_MINUTES));
         return (t);
      }
    }
  }
   return ( 0 );
}
 
gince :


Yanlış bir şey mi var?

Zayıflara yardım et.

 

Tünaydın. Sitede takip eden işlevi buldum:

for(i=0; i<SiparişToplam(); i++)
{
(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış) devam ederse;
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop_)
{
if(OrderStopLoss()<Teklif Noktası*TrailingStop_)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop_,OrderTakeProfit(),0,Green);
dönüş(0);
}
}
}

if(OrderType()==OP_SEL)
{
if((OrderOpenPrice()-Ask)>(Nokta*TrailingStop_))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop_)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop_,OrderTakeProfit(),0,Red);
dönüş(0);
}
}
}
}

Strateji test edilirken ilk emir açıldıktan sonra bu fonksiyon normal şekilde çalışır yani takip devam eder ve emir kapanır. Ancak ikinci sırayı açtıktan sonra, takip eden fonksiyon çağrılırken sıfır bölme hatası oluşuyor. Lütfen ikinci sıra, üçüncü sıra vb. için takip çalışması yapmama yardım edin.

 
Sana tüm forum için söylemeyeceğim, ama kişisel olarak, kaynak kodunu girintisiz gördüğümde, yazara herhangi bir şey açıklamanın faydasız olduğu konusunda bir saplantım var.