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

 
Vitaly Muzichenko :
Fiyatları hemen mi değiştiriyorsunuz yoksa onları alıp sonra hesaplamaya mı yerleştiriyorsunuz?
Vitaly Muzichenko :
Fiyatları hemen mi değiştiriyorsunuz yoksa onları alıp sonra hesaplamaya mı yerleştiriyorsunuz?
int k=dönem;
for(int i=1; i<=dönem; i++)
{
H1_Close[i]=Kapat[k];
k--;
}
Onlara son kapalı çubuktan başlayan süreye eşit bir zaman oturumu parçası alıyorum ve dizide yansıtılması için ters çeviriyorum. thaysesion 1'de sondan bir önceki çubuktur ve anladığım kadarıyla hesaplama i-th'den başlamalıdır.
onlar. işlevim, son kapatılan çubuğun SMMA değerini döndürmelidir.
 
Herkese iyi günler.
Aşağıdaki kod basit bir fikri kodlar.
Son kapalı sipariş SAT ise
Son kapatılan sipariş SL tarafından kapatılmışsa
SEL siparişini aç
if ( OrderSelect (Ht- 1 , SELECT_BY_POS , MODE_HISTORY ))                                            
if ( OrderType ()== OP_SELL )                                            
X = OrderProfit ( );                                            

if ( OrderSelect (Ht- 1 , SELECT_BY_POS , MODE_HISTORY ))                                            
if ( OrderType ()== OP_BUY )                                              
if (X < 0 )                                              

OrderSend ( Symbol (), OP_SELL , 0.1 , Bid , 3 , Ask + 400 * Point , Ask - 200 * Point , "17-10" , 123 );



SORU
Bu koda iki yeni koşul daha eklemek için hangi dil yapısı kullanılabilir (kırmızı ile vurgulanmıştır)

Son kapalı sipariş SAT ise
Sondan bir önceki sipariş SAT ise
Son kapatılan sipariş SL tarafından kapatılmışsa
PRE-son kapalı sipariş CL tarafından kapatılmışsa

Yardım için teşekkürler.


Kodu yazarsanız ve yapılması gerekenleri kelimelerle açıklamazsanız çok minnettar olurum.
 
Merhaba. Bekleyen tüm siparişleri kaldırmak için bir komut dosyası yazıyorum. Ancak, yalnızca bir siparişi siler. Her zaman bekleyen iki veya bir tane emrim var. Her durumda, yalnızca Buy Stop'u kaldırır. Sell Stop'u kaldırmak için, başka Buy Stop emri olmaması koşuluyla betiği yeniden çalıştırmanız gerekir. Lütfen bana hatanın nerede olduğunu söyle.

geçersiz DeleteOrders()
{
int Toplam=SiparişToplam();
for(int i=0;i<Toplam;i++)
if(SiparişSeçimi(i,SELECT_BY_POS))
{
int type=OrderType(), bilet=OrderTicket();
bool c;
anahtar (tip)
{
durum 4:
c=SiparişSil(bilet);
eğer(!c)
Yazdır(GetLastError());
kırmak;
durum 5:
c=SiparişSil(bilet);
eğer(!c)
Yazdır(GetLastError());
kırmak;
}
}
}
 
0B53RV3R :
Merhaba. Bekleyen tüm siparişleri kaldırmak için bir komut dosyası yazıyorum. Ancak, yalnızca bir siparişi siler. Her zaman bekleyen iki veya bir tane emrim var. Her durumda, yalnızca Buy Stop'u kaldırır. Sell Stop'u kaldırmak için, başka Buy Stop emri olmaması koşuluyla betiği yeniden çalıştırmanız gerekir. Lütfen bana hatanın nerede olduğunu söyle.

geçersiz DeleteOrders()
{
int Toplam=SiparişToplam();
for(int i=0;i<Toplam;i++)
if(SiparişSeçimi(i,SELECT_BY_POS))
{
int type=OrderType(), bilet=OrderTicket();
bool c;
anahtar (tip)
{
durum 4:
c=SiparişSil(bilet);
eğer(!c)
Yazdır(GetLastError());
kırmak;
durum 5:
c=SiparişSil(bilet);
eğer(!c)
Yazdır(GetLastError());
kırmak;
}
}
}
(i=total-1;i>=0;i--) için yineleme yönünü değiştirin
 
Maxim Kuznetsov :
(i=total-1;i>=0;i--) için yineleme yönünü değiştirin
Teşekkürler, şimdi çalışıyor. 0 indeksli bir emri silerken indeks 1'e sahip emrin indeks 0'a atandığını ve bir sonraki iterasyonda i == 1 olduğunu, ancak böyle bir emir olmadığını doğru anladım mı? Söyle bana, olur mu?
 
0B53RV3R :
Teşekkürler, şimdi çalışıyor. 0 indeksli bir emri silerken indeks 1'e sahip emrin indeks 0'a atandığını ve bir sonraki iterasyonda i == 1 olduğunu, ancak böyle bir emir olmadığını doğru anladım mı? Söyle bana, olur mu?
Böyle.
 

Özelleştirilebilir fraktalların bir işlevi var, kahretsin, bazıları çok ağır. Nesnelerin çizimini sadece fraktal oluşumunun doğruluğunu görsel olarak göstermek için bıraktım - olmayacak.

Soru: Görsel test nasıl kolaylaştırılabilir, aksi takdirde körelir:

extern int FrLeft= 15 ; // Баров слева
extern int FrRight= 5 ; // Баров справа

//-----------------------------------------------------------------------------------------------
void OnTick ()
{
int nFrUp= GetBarFractal( Symbol (), PERIOD_CURRENT ,FrLeft,FrRight, 0 , MODE_UPPER ); // Возвращает номер бара
int nFrDn= GetBarFractal( Symbol (), PERIOD_CURRENT ,FrLeft,FrRight, 0 , MODE_LOWER ); // Возвращает номер бара
double FrHigh = High [nFrUp]; // Цена верхнего фрактала
double FrLow  = Low [nFrDn]; // Цена нижнего фрактала

SetArrow( "FrUp" + "_" +( string ) Time [nFrUp], Time [nFrUp], High [nFrUp], clrDeepSkyBlue , 217 , 2 , ANCHOR_BOTTOM );
SetArrow( "FrDn" + "_" +( string ) Time [nFrDn], Time [nFrDn], Low [nFrDn], clrDeepPink , 218 , 2 , ANCHOR_TOP );

// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}

//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal( string symb, ENUM_TIMEFRAMES tf= 0 , int nLeft= 2 , int nRight= 2 , int numFr= 0 , int mode= MODE_UPPER ) {
int i= 0 ,cn= 0 ,pos= 0 ,r= 0 ,l= 0 ,e= 0 ,equals,bars;
double _high[], _low[];
nLeft=nLeft<= 2 ? 2 :nLeft;
nRight=nRight<= 2 ? 2 :nRight;
equals=nLeft+nRight;
bars= Bars (symb,tf)-equals;
ArraySetAsSeries (_high, true );
ArraySetAsSeries (_low, true );

   for (pos=nRight+ 1 ; pos<bars; pos++) {
   r=nRight;
   if (mode== MODE_UPPER ) {
     CopyHigh (symb,tf, 0 ,pos+equals+ 1 ,_high);
     for (i= 1 ; i<=r; i++) {
     if (_high[pos]<=_high[pos-i]) break ;
   }}
   if (mode== MODE_LOWER ) {
     CopyLow (symb,tf, 0 ,pos+equals+ 1 ,_low);
     for (i= 1 ; i<=r; i++) {
     if (_low[pos]>=_low[pos-i]) break ;
   }}
   //--
   if (i==r+ 1 ) {
    l=nLeft;
    e=equals;
     for ( int j= 1 ; j<=l+equals; j++) {
       if (mode== MODE_UPPER ) {
       if (_high[pos]<_high[pos+j])   break ;
       if (_high[pos]>_high[pos+j])  l--;
       if (_high[pos]==_high[pos+j]) e--;
      }
       if (mode== MODE_LOWER ) {
       if (_low[pos]>_low[pos+j])   break ;
       if (_low[pos]<_low[pos+j])  l--;
       if (_low[pos]==_low[pos+j]) e--;
      }
       if (l== 0 ) {
       cn++;
       if (cn>numFr) return (pos);
      }
       //--
       if (e< 0 ) break ;
   }}
  }
   Print ( __FUNCTION__ ": Фрактал не найден" );
   return ( 0 );
}

//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow( string nm= "" , datetime t1= 0 , double p1= 0 , color col= clrRed ,
                                            int code= 252 , int width= 1 , int anchor= 0 ) {
if ( ObjectFind ( 0 ,nm)==- 1 ) {
     ObjectCreate ( 0 ,nm, OBJ_ARROW , 0 , 0 , 0 );
     ObjectSetInteger ( 0 ,nm, OBJPROP_COLOR ,col);
     ObjectSetInteger ( 0 ,nm, OBJPROP_ARROWCODE ,code);
     ObjectSetInteger ( 0 ,nm, OBJPROP_ANCHOR ,anchor);
     ObjectSetInteger ( 0 ,nm, OBJPROP_WIDTH ,width);
     ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTED , false );
     ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTABLE , true );
     ObjectSetInteger ( 0 ,nm, OBJPROP_HIDDEN , false );
     ObjectSetDouble ( 0 ,nm, OBJPROP_PRICE ,p1);
     ObjectSetInteger ( 0 ,nm, OBJPROP_TIME ,t1);
   }
}

Teşekkür ederim!

 
Vitaly Muzichenko :

Özelleştirilebilir fraktalların bir işlevi var, kahretsin, bazıları çok ağır. Nesnelerin çizimini sadece fraktal oluşumunun doğruluğunu görsel olarak göstermek için bıraktım - olmayacak.

Soru: Görsel test nasıl kolaylaştırılabilir, aksi takdirde körelir:

Teşekkür ederim!

Sadece hepsini bir göstergeye dönüştürerek kolaylaştırabilirsiniz. Test, grafiğin sol üst köşesindeki yorumu ve özellikle testçinin kendi koyduğu pozisyonları açma ve kapama işaretlerini bile yavaşlatır.
 

Merhaba. Yeni başlayana söyleme.

İşte bir örnek:

if(Koşul1)

if(Koşul2)

{

}

başka

{

}

Programa göre, Else if(condition1)'e atıfta bulunmalıdır ve Koşul1 karşılanmazsa yürütülür.

Ve aslında, Koşul 2 karşılanmazsa yürütülür.‌

 
Andy-D :

Merhaba. Yeni başlayana söyleme.

İşte bir örnek:

if(Koşul1)

if(Koşul2)

{

}

başka

{

}

Programa göre, Else if(condition1)'e atıfta bulunmalıdır ve Koşul1 karşılanmazsa yürütülür.

Ve aslında, Koşul 2 karşılanmazsa yürütülür.‌


Durumla birlikte hemen kaşlı ayraç koyma alışkanlığı edinin

if(Koşul)

{

}

A‌ senin sorunun üzerine

if (Условие 1 )
   {
       if (Условие 2 )

        {

        }
    }
   else

    {

    }