MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 738

 
novichok2018 :

Aynı şekilde, 12 dakikalık çalışmada bir mesaj görüntüler.

Dizinin doldurulduğu işlevin başında Print Ekle

 Print ( "Range = " , ArrayRange (NewsArr, 1 ));

ve ikinci boyuttaki değerlerin sayısını göster

 
Ilya Prozumentov :

Her şeyden önce NomNews'in 999'dan daha büyük bir durumdayken while döngüsüne girdiğini söyleyebilirim. Sonra buna neyin sebep olduğunu aramanız ve bu değişkeni bir yere sıfırlamanız gerekir.

Bunu kontrol etmek için döngünün en başına şunu girin:

Evet, 11. dakikada 1000'lik bir çıktı verdim.

 
Alekseu Fedotov :

Dizinin doldurulduğu işlevin başında Print Ekle

ve ikinci boyuttaki değerlerin sayısını göster

while döngüsünün başına eklenir   ve sonsuz bir Aralık = 1000 var. Yanlış yere mi koydun?

Ve bu sayı (veya işlev?): datetime TimeNewsFunck(int nomf) nedir?

{

string s=NewsArr[0][nomf];

string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2 ),":",StringSubstr(s,14,4));

return((datetime)(StringToTime(time) + GMTplus*3600));

}

ve int nomf değerini nereden alıyor? Bulamadım.

 
novichok2018 :

while döngüsünün başına eklenir   ve sonsuz bir Aralık = 1000 var. Yanlış yere mi koydun?

Ve bu sayı (veya işlev?): datetime TimeNewsFunck(int nomf) nedir?

{

string s=NewsArr[0][nomf];

string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2 ),":",StringSubstr(s,14,4));

return((datetime)(StringToTime(time) + GMTplus*3600));

}

ve int nomf değerini nereden alıyor? Bulamadım.

Bir de öyle bir fonksiyon var ki, ne kadar uğraşsam da çözemedim. Belki bir köpek gömülüdür?

 bool CheckInvestingNews( int &pwr, datetime &mintime)
  {

   bool CheckNews= false ; pwr= 0 ; int maxPower= 0 ;
   if (MidleNews || HighNews)
     {
       if ( TimeCurrent ()-LastUpd>=Upd){ Print ( "Investing.com News Loading..." );UpdateNews();LastUpd= TimeCurrent (); Comment ( "" );}
       WindowRedraw ();
       //---Draw a line on the chart news--------------------------------------------
       if (DrawNewsLines)
        {
         for ( int i= 0 ;i<NomNews;i++)
           {
             string Name= StringSubstr ( "NS_" + TimeToStr (TimeNewsFunck(i), TIME_MINUTES )+ "_" +NewsArr[ 1 ][i]+ "_" +NewsArr[ 3 ][i], 0 , 63 );
             if (NewsArr[ 3 ][i]!= "" ) if ( ObjectFind (Name)== 0 ) continue ;
             if (OnlySymbolNews && StringFind (ValStr,NewsArr[ 1 ][i])< 0 ) continue ;
             if (TimeNewsFunck(i)< TimeCurrent () && Next) continue ;

             color clrf= clrNONE ;
             if (HighNews && StringFind (NewsArr[ 2 ][i], "High" )>= 0 )clrf=HighColor;
             if (MidleNews && StringFind (NewsArr[ 2 ][i], "Moderate" )>= 0 )clrf=MidleColor;
   //         if(LowNews && StringFind(NewsArr[2][i],"Low")>=0)clrf=LowColor;

             if (clrf== clrNONE ) continue ;

             if (NewsArr[ 3 ][i]!= "" )
              {
               ObjectCreate ( 0 ,Name, OBJ_VLINE , 0 ,TimeNewsFunck(i), 0 );
               ObjectSet (Name, OBJPROP_COLOR ,clrf);
               ObjectSet (Name, OBJPROP_STYLE ,LineStyle);
               ObjectSetInteger ( 0 ,Name, OBJPROP_WIDTH ,LineWidth);
               ObjectSetInteger ( 0 ,Name, OBJPROP_BACK , true );
              }
           }
        }
       //---------------event Processing------------------------------------
       int ii;
       for (ii= 0 ;ii<NomNews;ii++)
        {
         int power= 0 ;
         if (HighNews && StringFind (NewsArr[ 2 ][ii], "High" )>= 0 ){ power= 3 ; MinBefore=HighIndentBefore; MinAfter=HighIndentAfter; }
         if (MidleNews && StringFind (NewsArr[ 2 ][ii], "Moderate" )>= 0 ){ power= 2 ; MinBefore=MidleIndentBefore; MinAfter=MidleIndentAfter; }
 //        if(LowNews && StringFind(NewsArr[2][ii],"Low")>=0){ power=1; MinBefore=LowIndentBefore; MinAfter=LowIndentAfter; }
         if (NFPNews && StringFind (NewsArr[ 3 ][ii], "Nonfarm Payrolls" )>= 0 ){ power= 4 ; MinBefore=NFPIndentBefore; MinAfter=NFPIndentAfter; }
         if (power== 0 ) continue ;

         if ( TimeCurrent ()+MinBefore* 60 >TimeNewsFunck(ii) && TimeCurrent ()-MinAfter* 60 <TimeNewsFunck(ii) && (!OnlySymbolNews || (OnlySymbolNews && StringFind (ValStr,NewsArr[ 1 ][ii])>= 0 )))
           {
             if (power>maxPower){   maxPower=power; mintime=TimeNewsFunck(ii); }
              } else {
            CheckNews= false ;
           }
        }
       if (maxPower> 0 ){ CheckNews= true ; oppoz= true ; }
     }
   pwr=maxPower; 
   return (CheckNews);
  }
 
novichok2018 :

Bir de öyle bir fonksiyon var ki, ne kadar uğraşsam da çözemedim. Belki bir köpek gömülüdür?

Bu sadece yazarın kendisi burada neler olduğunu anlayacaktır. OnTick() taşımadan daha iyi kod

 
novichok2018 :

Evet, 11. dakikada 1000 çıktı verdim.

değiştirmeyi dene

 while (! IsStopped ())

burada bu hatta

 while (NomNews< 300 && ! IsStopped ())
 
Ilya Prozumentov :

Formülde fazladan (( 2 *psd*usd)*(( 2 *psd*usd)-C))/(C- 1 )) .

Üs: ^0.5, *0.5 değil

Görüntülenen sembol ve sihir için tek bir işlem yoksa veya tek bir karlı veya kaybedilen işlem yoksa veya yalnızca bir çift varsa (C=1), 0'a böleceğiz.

Formülün kendisinden önce, psd ve usd'nin > 0 ve C !=1 olduğunu kontrol etmeniz gerekir.

Kârlı olanlar > 1, kârsız olanlar < 1, kâr = 1 ile analiz edilmez, yani. 1 de bir veya başka bir gruba dahil edilmelidir.

İşlevinizde, önce sembol ve sihirle eşleşen anlaşma numaralarını seçmek, ardından sayılarının değişip değişmediğini kontrol etmek, evet ise zn'yi yeniden hesaplamak, değilse zn'yi döndürmek (bu durumda zn'yi sıfırlamayın ve kontrol edin) != 0 yazdırma gerekli olmadığında)

Baykuş, ww ve nn değişkenlerine bağlı olduğu için çalışmayı durdurur ve işlevinizin girişinde baykuş algoritmasını değiştirir ve yok ederler.

Bir kod biçimlendirme hatası olsaydı, hiçbir şey derlenmezdi.

Sadece teşekkür edebilirim. RuNet'te yardım ettikleri tek yer burası.

Şimdi, çıktı şu çıktıyı verir "Stop_Ma_v_5.1 EURUSD,M15: == Z-score equals = -nan(ind)" . Bunun ne anlama geleceğini söyleme, kodun bir sayı vermesi mi gerekiyor?

kod:

//+------------------------------------------------------------------+
//| Подсчёт z-вероятности. @axe44 Алексей Корольков                  |
//+------------------------------------------------------------------+
  
double Z()
  {
    zn= 0 ;           // z-число
    psd= 0 ;         // кол. положительных сделок
    usd= 0 ;         // количество отрицательных сделок 
    www= 0 ;         // боол переменная 
    nnn= 0 ;         // боол переменная
    kolichestvo= 0 ; // подсчёт закрытых ордеров открытых роботом
    C= 0 ;           // C = количество чередований между отрицательными и положительными сделками
    index= OrdersHistoryTotal (); 
       if ( OrdersHistoryTotal ()> 302 ) index= 301 ; // берём не более 301 сделки
     //if(index<30) return(0);                 // берём не менее 30
    count= OrdersHistoryTotal ();             // считаем от скольки 
    prom=count-index;                       // выделяем только последние сделки
     if (prom< 0 ) prom= 0 ;                     // исключаем ошибки
  
   for ( i=prom;i<=count;i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           { // далее магия
           pribul= OrderProfit (); 
           if (ww== 0 &&pribul> 1 ){C++;www= 1 ;nnn= 0 ;} // подсчитываем смену тенденции
           if (nn== 0 &&pribul< 1 ){C++;www= 0 ;nnn= 1 ;} // подсчитываем смену тенденции 
           if (pribul> 1 ){psd++;} //прибыльные сделки
           if (pribul< 1 ){usd++;} // убыточные сделки
           kolichestvo++;
           }
        }
     }
     /*
Величина Z = (A * (C — 0.5) — B)/   ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
          */ 
            
             if (kolichestvo> 30 &&psd> 0 &&usd> 0 &&C!= 1 )
            zn=(index*(C- 0.5 )- 2 *psd*usd)  /   pow ((( 2 *psd*usd*( 2 *psd*usd-C))/(C- 1 )), 0.5 );
      
     
     
   return (zn);
  }
teşekkürler
 
aleksandr bebishev :

Beyler, Mql5 profesyonelleri, bir hedge hesabındaki bir pozisyonu kapatmak için talepte bulunmanıza yardımcı olun. Durum: Bir AL pozisyonu açık, Limitli Satış ile kapatmanız gerekiyor. Soru: Seçilen pozisyonun kapanması ve yeni bir SATIŞ kilitli ALIM açılmaması için nasıl doğru bir şekilde talepte bulunulur??? Lütfen, lütfen yorum içeren bir kod parçası yazın! Şimdiden teşekkür ederim!

Aynı enstrüman tarafından açılan başka bir emrin bir açık emriyle, ancak ters yönde kapanma.

bool OrderCloseBy (
    int         bilet _        // kapatılacak sipariş numarası
    int         karşı ,      // ters sıranın numarası
    renk       ok_renk    // Renk
);

Seçenekler

bilet

[içinde] Kapatılan siparişin benzersiz seri numarası.

zıt

[içinde] Ters sıranın benzersiz seri numarası.

ok_renk

[içinde] Grafikteki kapat okunun rengi. Parametre yoksa veya değeri CLR_NONE'a eşitse, ok grafikte görüntülenmez.

Geri dönüş değeri

Başarı durumunda true, başarısızlık durumunda false döndürür. Bir hata hakkında bilgi almak için GetLastError() işlevini çağırmalısınız.

Misal:

   if ( iRSI ( NULL ,0,14, PRICE_CLOSE ,0)>75)
{
      OrderCloseBy (order_id, karşıt_id);
      dönüş (0);
}

not Burada bu başlıkta sadece MQL4 analiz ediliyor

 
Aliaksei Karalkou :

Sadece teşekkür edebilirim. RuNet'te yardım ettikleri tek yer burası.

Şimdi, çıktı şu çıktıyı verir "Stop_Ma_v_5.1 EURUSD,M15: == Z-score equals = -nan(ind)" . Bunun ne anlama geleceğini söyleme, kodun bir sayı vermesi mi gerekiyor?

kod:

teşekkürler
nan - NaN - Sayı değil - sayı değil. Z puanı hesaplamasındaki sayıları normalleştirmeyi deneyin
 
Aliaksei Karalkou :

Aynı enstrüman tarafından açılan başka bir emrin bir açık emriyle, ancak ters yönde kapanma.

bool OrderCloseBy (
    int         bilet _        // kapatılacak sipariş numarası
    int         karşı ,      // ters sıranın numarası
    renk       ok_renk    // Renk
);

Seçenekler

bilet

[içinde] Kapatılan siparişin benzersiz seri numarası.

zıt

[içinde] Karşı sıranın benzersiz seri numarası.

ok_renk

[içinde] Grafikteki kapat okunun rengi. Parametre yoksa veya değeri CLR_NONE'a eşitse, ok grafikte görüntülenmez.

Geri dönüş değeri

Başarı durumunda true, başarısızlık durumunda false döndürür. Bir hata hakkında bilgi almak için GetLastError() işlevini çağırmalısınız.

Misal:

   if ( iRSI ( NULL ,0,14, PRICE_CLOSE ,0)>75)
{
      OrderCloseBy (order_id, karşıt_id);
      dönüş (0);
}

not Burada bu başlıkta sadece MQL4 analiz ediliyor

Numara. Burada, bu başlıkta, hem mql4 hem de mal5 ile ilgili soruları çözüyorlar, çünkü asıl görev sadece algoritmalar ve kodlarla değil, aynı zamanda mql4'ten mql5'e geçişi kolaylaştırmaya yardımcı olmak olarak belirlendi.