Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 120

 
Ihor Herasko :

Evet, görüyorum. Ve sorunun cevabını aşağıdaki gönderide görüyorum https://www.mql5.com/ru/forum/160587/page115#comment_6521492 . Başka bir deyişle, sorun, işlevselliğin mantıksal alt görevlere ayrılmamasıdır. Hepsini üst üste yığdınız: emirleri sıralamak, bir alım satım işlemine karar vermek ve bir alım satım işlemi yapmak.

Bu sorun üç aşamada çözülür:

  1. Programın izlemesi gereken siparişler hakkında bilgi toplama. Bu, zaten sahip olduğunuz siparişleri yineleme döngüsüdür. Döngü yürütmesinin sonucu, bir dizi siparişin oluşumu olmalıdır.
  2. Ticaret sinyallerinin hesaplanması. Hesaplama sonucu, siparişleri açma ve/veya kapatma komutudur. Ticaret stratejisine bağlıdır. Daha önce, numaralandırma yokken, kodları kullanıyordum: 0 - sinyal yok, 1 - Al'ı aç, -1 - Satışı aç, 2 - Al'ı kapat, -2 - Satışı kapat.
  3. Bir ticaret işleminin yürütülmesi. Bir tür alım satım sinyali varsa ve emirlerden biri buna uygunsa (1. nokta), o zaman bir alım satım işlemi gerçekleştirilir. Bundan sonra, 1. adımdan başlayarak tüm algoritma yeniden başlatılır. Bazı durumlarda, bir sonraki tıklamada her şeye devam etmek için OnTick'ten çıkılır.

Teşekkürler. En azından ne yapılacağı belli oldu. Nasıl olduğunu anlamaya çalışacağım. Doğru, henüz dizilerle tanışmadım. Her neyse, tekrar teşekkürler.

 

Bana nasıl çıkacağımı söyle!!!


for(int i=OrdersTotal()-1; i>=0; i--)

{

Sipariş Seçimi (i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SEL)

kırmak;

Uyarı şudur: 'OrderSelect' dönüş değeri kontrol edilmelidir

Bu 'OrderSelect' değeri başka nasıl kontrol edilmelidir?

bunu yaparsam: j=OrderSelect(); Bu doğru?


 
Rewerpool :

Bana nasıl çıkacağımı söyle!!!


for(int i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SEL)

kırmak;

Uyarı şudur: 'OrderSelect' dönüş değeri kontrol edilmelidir

Bu 'OrderSelect' değeri başka nasıl kontrol edilmelidir?

bunu yaparsam: j=OrderSelect(); Bu doğru?


 if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
 
Alekseu Fedotov :

Yardım etmedi!(

(((((

 
Bir dosyaya yazdım, her şey yolunda, ama şimdi örneğin "eurusd" "1.2242" geçici verileri vb. verileri nasıl ayrıştırırım?
 
Mickey Moose : Bir dosyaya yazdım , her şey yolunda ama şimdi örneğin "eurusd" "1.2242" geçici verileri vb. veriler nasıl ayrıştırılır?

string s=FileReadString(F1); // Bir metin dosyasının sonraki satırını okuma
StringSplit(s, "," , a); // Virgülle ayrılmış dize öğelerini bir diziye ayıklayın
tarihsaat T1=StrToTime(a[4]); // Sonra dönüşümlerim var ...
int ord=StrToInteger(a[8]);
double Fiyat=StrToDouble(a[12]);

 
novichok2018 :

Teşekkürler. En azından ne yapılacağı belli oldu. Nasıl olduğunu anlamaya çalışacağım. Doğru, henüz dizilerle tanışmadım. Her neyse, tekrar teşekkürler.

En az bir blok yazın ve gösterin. Daha fazla burada bu durumda istemi.

 
Rewerpool :

Yardım etmedi!(


tekrar dikkatlice okuyun

 if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))

tüm kod şöyle görünecek

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) 
     {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
       if ( OrderMagicNumber ()==Magic && OrderType ()== OP_SELL )
          {
         break ;
          }
        }
      }
 
Rewerpool :

Yardım etmedi!(


Yani hiçbir şey yapmadın. Yukarıda yazmışlar:

 if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))

Ve doğrulamadan yazdınız. Her ne kadar böyle daha okunaklı olsa da:

 for ( int i = OrdersTotal () - 1 ; i >= 0 ; --i)
{
   if (! OrderSelect (i, SELECT_BY_POS ))
       continue ;
   ....
}
 

@Ihor Herasko @Alekseu Fedotov

TEŞEKKÜR EDERİM!! BUNA YARDIMCI OLDU!