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

 
andrey46 :
EA'nın neden test cihazında iyi çalıştığını kim bilir, sipariş verir, vb., ancak gerçek bir hesapta , robot aktif olmasına rağmen siparişler verilmez.

Dergiyi okumalısın, bir cevabı olabilir

 

Lütfen bana bunun nasıl olduğunu söyle -

 double w = 18.2

anla -

 int w = 18
 
TrederMT5 :

Lütfen bana bunun nasıl olduğunu söyle -

anla -

 int w1;
double w = 18.2 ;
w1=( int )w;
w=round (w);

Açık tip döküm.

Ayrıca bir bütünden tamsayı (yuvarlak) da alabilirsiniz, ancak bir çiftte 18,0 olacaktır.

 
scomoroh :

O zaman soruyu tekrarlayacağım.

ifade

 if (izmb>b ||izmb<b || izms>s || izms<s)

bununla aynı:

 if (izmb!=b || izms!=s)

Ve eğer bir şeyi kaydetmek istiyorsanız, bunu global bir değişkende yapın.

Bu, işlevin gövdesi dışında bildirilendir.

 int izmb= 0 , izms= 0 ;


void OnTick ()
   {
   .........
 
Valeriy Yastremskiy :


teşekkürler
 

Hepinize iyi günler!

MQL4 hakkında soru. İşte basit bir kod

 double LoY[ 31 ][ 31 ],LoU,LoU1;
int S,S1,S2;
void OnTick ()
{
if (Minute()== 20 &&Minute()!=S1)
{
ArrayFill (LoY, 0 , 31 , 0.5555 );
S1=Minute();
}
//***************************************************************
if (Minute()!=S)
{
LoY[ 0 ][ 0 ]=Bid;
ArraySort (LoY, WHOLE_ARRAY , 0 ,MODE_ASCEND);
Print ( "----LoY[0][1]-- Горизонтально ---  [0}  " ,  LoY[ 0 ][ 0 ], "  [1] " ,   LoY[ 0 ][ 1 ], "  [2] " ,   LoY[ 0 ][ 2 ], "  [3] " ,   LoY[ 0 ][ 3 ], "  [4] " ,   LoY[ 0 ][ 4 ], "  [26] " ,   LoY[ 0 ][ 26 ], "  [27] " ,   LoY[ 0 ][ 27 ], "  [28] " ,   LoY[ 0 ][ 28 ], "  [29] " ,   LoY[ 0 ][ 29 ], "  [30] " ,   LoY[ 0 ][ 30 ]);
Print ( "----LoY[1][0]-- Вертикалььно ---  [0}  " ,  LoY[ 0 ][ 0 ], "  [1] " ,   LoY[ 1 ][ 0 ], "  [2] " ,   LoY[ 2 ][ 0 ], "  [3] " ,   LoY[ 3 ][ 0 ], "  [4] " ,   LoY[ 4 ][ 0 ], "  [26] " ,   LoY[ 26 ][ 0 ], "  [27] " ,   LoY[ 27 ][ 0 ], "  [28] " ,   LoY[ 28 ][ 0 ], "  [29] " ,   LoY[ 29 ][ 0 ], "  [30] " ,   LoY[ 30 ][ 0 ]);
S=Minute();
}
}

İki boyutlu bir dizi oluşturur ve program onu değerlerle doldurur. ArrayFill(LoY,0,31,0.5555) kodunda beni ilgilendiren iki fonksiyon var; ve ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND); Dizine bakılırsa, ikisi de iki boyutlu dizilerle çalışır. ArrayFill() kesinlikle yatay olarak doldurulmuş dizilerle çalışır, Reference dizileri kesinlikle soldan sağa (yukarıdan aşağıya veya aşağıdan yukarıya değil) değerlerle doldurduğunu belirtir. ArraySort(), iki boyutlu bir diziyi birinci boyuta göre sıralar. El Kitabı, yatay olarak doldurulmuş dizileri mi yoksa dikey olarak doldurulmuş dizileri mi sıraladığını söylemez. Kodumun yürütülmesine bakılırsa, ArraySort() yalnızca dikey olarak doldurulmuş dizileri sıralar. Görünüşe göre bu iki işlev aynı programda aynı dizide çalışamıyor.

SORU. ArraySort() işlevinin doğru çalışması benim için önemli.Buna dayanarak, ArraySort() , ArrayFill()'in çalıştığı yatay olarak doldurulmuş dizileri sıralayacak şekilde yapılandırılabilir mi? Veya MQL4'te çalışan MQL5'in sıralama işlevi bunun yerine bana yardımcı olabilir mi? Veya yatay olarak doldurulmuş bir diziyi tüm değerleriyle dikey olana dönüştüren bir fonksiyon var. Tek kelimeyle, programımın bir diziyi yatay olarak sıralamasını nasıl sağlarım

Not. Yerine   ArrayFill() bir döngü kullanmak için - benim için uygun değil.

yardım için teşekkürler

 
ANDREY :

Hepinize iyi günler!

MQL4 hakkında soru. İşte basit bir kod

İki boyutlu bir dizi oluşturur ve program onu değerlerle doldurur. ArrayFill(LoY,0,31,0.5555) kodunda beni ilgilendiren iki fonksiyon var; ve ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND); Dizine bakılırsa, ikisi de iki boyutlu dizilerle çalışır. ArrayFill() kesinlikle yatay olarak doldurulmuş dizilerle çalışır, Reference dizileri kesinlikle soldan sağa (yukarıdan aşağıya veya aşağıdan yukarıya değil) değerlerle doldurduğunu belirtir. ArraySort(), iki boyutlu bir diziyi birinci boyuta göre sıralar. El Kitabı, yatay olarak doldurulmuş dizileri mi yoksa dikey olarak doldurulmuş dizileri mi sıraladığını söylemez. Kodumun yürütülmesine bakılırsa, ArraySort() yalnızca dikey olarak doldurulmuş dizileri sıralar. Görünüşe göre bu iki işlev aynı programda aynı dizide çalışamıyor.

SORU. ArraySort() işlevinin doğru çalışması benim için önemli.Buna dayanarak, ArraySort() , ArrayFill()'in çalıştığı yatay olarak doldurulmuş dizileri sıralayacak şekilde yapılandırılabilir mi? Veya MQL4'te çalışan MQL5'in sıralama işlevi bunun yerine bana yardımcı olabilir mi? Veya yatay olarak doldurulmuş bir diziyi tüm değerleriyle dikey olana dönüştüren bir fonksiyon var. Tek kelimeyle, programımın bir diziyi yatay olarak sıralamasını nasıl sağlarım

Not. Yerine   ArrayFill() bir döngü kullanmak için - benim için uygun değil.

yardım için teşekkürler

dikkat ettin mi

Not

Dizi Doldurma

Çok boyutlu bir dizi , ArrayFill() tarafından işlendiğinde tek boyutlu olarak kabul edilir, örneğin dizi[2][4], dizi[8] olarak değerlendirilir , bu nedenle bu diziyle çalışırken dizini belirtmek kabul edilebilir Böylece, dizi[2][4] için ArrayFill(array, 5, 2, 3.14) çağrılması, dizi[1][1] ve dizi[1][2] değerini 3.14 ile dolduracaktır.


Bu hat

 ArrayFill (LoY, 0 , 31 , 0.5555 );

diziyi tam olarak bir satırla dolduracaktır.

Dikeylik/yataylık konusuna gelince, bu, kayda bakmayı nasıl sürdüreceğinizdir. Excel elektronik tablosuna bakın, her şey netleşecektir. "A" sütunu değerlerle doluysa, tek boyutlu bir dizi elde edersiniz. Nasıl bulunur? Bu doğru... yatay olarak çünkü kanepede uzanmış ona bakıyorum......

 
Alexey Viktorov :

dikkat ettin mi

Not

Bu hat

diziyi tam olarak bir satırla dolduracaktır.

Dikeylik/yataylık konusuna gelince, kayda bakmayı bu şekilde sürdüreceksiniz. Excel elektronik tablosuna bakın, her şey netleşecektir. "A" sütunu değerlerle doluysa, tek boyutlu bir dizi elde edersiniz. Nasıl bulunur? Bu doğru... yatay olarak çünkü kanepede uzanmış ona bakıyorum......

Cevap için teşekkürler. Yazdığın her şeyi anladın. Ama benim sorunum açısından yazılanların anlamını anlamadım.

Kodumdaki yatay iki boyutlu bir dizi ile, 0 veya 1 dizininde 2 satır ve 0 ila 30 dizinlerinde sütunlar olduğunda kastediyorum.   [0]   [0],   [0]   [1],   [0]   [2], ... [0]   [30] İkinci boyut şu şekilde gösterilir:   [1]   [0],   [1]   [1],   [1]   [2], ... [1]   [otuz]  

Kodumdaki dikey iki boyutlu bir dizi ile, 0 ila 30 dizinlerinde 31 satır ve 0 ve 1 dizinlerinde 2 sütun olduğunda kastediyorum.   [0]   [0],   [1   [0],   [2]   [0], ... [30]   [0] İkinci boyut şu şekilde gösterilir:   [0]   [1],   [1]   [1],   [2]   [1], ... [30]   [1]  

Kodumu uygularsanız, dizi dikey olarak doldurulacaktır. Ve ArraySort() işlevi diziyi olması gerektiği gibi sıralayacaktır .

SORU ArrayFill() işlevi neden çalışmıyor? Sonuçta, yirminci dakikada dizinin ilk boyutunu (31 eleman) aynı 0,5555 değerlerle doldurmasını istedim.
Yardım için teşekkürler.

 
MakarFX :

bunu denerdim

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

 
Aleksei Stepanenko :

ifade

bununla aynı:

Ve eğer bir şeyi kaydetmek istiyorsanız, bunu global bir değişkende yapın.

Bu, işlevin gövdesi dışında bildirilendir.

Danışmanın girişini arama koşullarının her onay işaretiyle değil, yalnızca bir sonraki siparişin başka bir danışman tarafından veya manuel olarak açılması veya kapatılması durumunda (işlemciye fazladan yük olmaması için) kontrol edildiğine dair bir fikir vardı. Bu nedenle, her tik ile sipariş sayısının yazışmasını kontrol etmek gerekir.

Statik bir değişken - statik kullanmak mümkün mü? Program bu formda çalışacak mı?

    double LB= 0 ,LS= 0 ;
    int b= 0 ,s= 0 ;
    static int izmb, izms; // статическая переменная
   
   for ( int i= 0 ; i< OrdersTotal (); i++)
   {    
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()== Symbol ())
         { 
             int tip = OrderType(); 
             if (tip==OP_BUY)             
            {  
               LB  += OrderLots();
               b++; 
            }                                         
             if (tip==OP_SELL)        
            {
               LS  += OrderLots();
               s++;
            } 
         }
     }
     
   }
     if (izmb!=b || izms!=s){ 
    izmb=b;
    izms=s 
           // далее идут условия для открытия ордера.
     }
Neden: