Danışman yazmayı öğrenmek... - sayfa 4

 

Danışman çok para birimi ise, o zaman gereklidir.

Ayrıca, Teklif ve Puan değerleri muhtemelen MarketInfo() aracılığıyla zaten ayarlanmıştır (bildirilmiştir ).

Bir keresinde çok para birimli bir Uzman Danışman hakkında bir konu açmıştım. Bir göz atın ve bazı sorular netleşecek ....

'Çok para birimli EA ile ilgili soru'

 

Ve burada özellikle değişiklik için

'Çok para birimli EA ile ilgili soru'

 

Bu seçeneği yaptım.. Açtıktan hemen sonra ModifyPos() fonksiyonunu çağırıyorum.

 OrderSend ( . . . ) ;

ModifyPos ( ) ;



void ModifyPos ( )
  {
   if ( OrderSelect ( 0 , SELECT_BY_POS ) = = true ) // Если есть открытый ордер
    { 
     if ( OrderType ( ) = = OP_BUY )
     OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Bid - Stop * Point , Bid - TakeProfit * Point , 0 , Red ) ;
     if ( OrderType ( ) = = OP_SELL )
     OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Ask + Stop * Point , Ask + TakeProfit * Point , 0 , Red ) ;
    }  
  }

Dur - 20

Kâr Al - 100

Günlükte hata - OrderModify hatası 130

 

Almak için satın alma pozisyonları oluşturmaya çalışın

 Ask + TakeProfit * Point

Sen kendin düşünüyorsun! Satın alma işleminiz neden birdenbire pozisyonun mevcut fiyatından daha düşük oldu?

Hata oluşturmasına şaşmamalı

Aynısı satış pozisyonu için de geçerli...

AMA, kar al'ı değiştirmeniz gerekmiyorsa, bunu yapmak daha iyidir:

 OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Bid - Stop * Point ,
                                                     OrderTakeProfit ( ) , 0 , Blue ) ;
Aynı şekilde hücre için
 
rid >> :

Sen kendin düşünüyorsun! Satın alma işleminiz neden birdenbire pozisyonun mevcut fiyatından daha düşük oldu?

Hata oluşturmasına şaşmamalı

Rid'e çok teşekkür ederim!

benim dikkatim değil) ... ortaya çıktı ve hatta işe yaradı)

 void ModifyPos ( )
   {
        if ( OrderSelect ( 0 , SELECT_BY_POS ) = = true ) // Если есть открытый ордер
            { 
               if ( OrderType ( ) = = OP_BUY )
                   OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Bid - Stop * Point , OrderTakeProfit() , 0 , Red ) ;
               if ( OrderType ( ) = = OP_SELL )
                   OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Ask + Stop * Point , OrderTakeProfit() , 0 , Red ) ;
            }      
   }
 

Test sırasında günlükte bulunan son hata OrderSend hatası 138'dir .

İşlem olmadığında kesintisiz devam eder, yani. her tik için bu hatayı.

Emir tetiklendiği anda hata ortadan kalkar.. sipariş kapanır ve hata tekrar gider..

Sinyal vermeden sipariş göndermeye çalışıyor gibi görünüyor ama nedenini anlamıyorum çünkü koşul ( eğer ) satılık ve satın alınabilir

 
ALex2008 писал(а) >>

Test sırasında günlükte bulunan son hata OrderSend hatası 138'dir .

İşlem olmadığında kesintisiz devam eder, yani. her tik için bu hatayı.

Emir tetiklendiği anda hata ortadan kalkar.. sipariş kapanır ve hata tekrar gider..

Sinyal vermeden sipariş göndermeye çalışıyor gibi görünüyor ama nedenini anlamıyorum çünkü koşul ( eğer ) satılık ve satın alınabilir

iyi ki okumadın dikkatli oku https://book.mql4.com/en/content her şey orada

 

Okumak ve anlamak farklı şeyler... Pratikte anlamak istiyorum)

Girmek için bir koşul vardır, bu koşullar sağlandıktan sonra kontrol emrin açıldığı fonksiyona aktarılır.

Bu yüzden OrderSend'in koşulları atlayarak nasıl çalışmaya çalıştığını anlayamıyorum .. ve mantıksal olarak ne hata veriyor .. çünkü. giriş koşulu yok

 
bool Yenileme Oranları ( )

Önceden tanımlanmış değişkenler ve zaman serisi dizilerindeki verileri güncelleme. Bu işlev, bir Uzman Danışman veya bir komut dosyası uzun süredir hesaplamalar yaptığında ve güncellenmiş verilere ihtiyaç duyduğunda kullanılır. Veriler güncellenirse DOĞRU, değilse YANLIŞ döndürür. Veriler, yalnızca istemci terminalinin mevcut durumuna karşılık geldiği için güncellenemeyebilir. Uzman Danışmanlar ve komut dosyaları, kendi geçmiş veri kopyalarıyla çalışır. Mevcut simgeye ilişkin verilerin bir kopyası, bir Uzman Danışmanın veya bir komut dosyasının ilk başlatılması sırasında oluşturulur. Expert Advisor'ın sonraki her açılışında (komut dosyasının bir kez yürütüldüğünü ve gelen onaylara bağlı olmadığını hatırlayın), başlangıçta oluşturulan kopya güncellenir. Expert Advisor veya script çalışırken bir veya daha fazla yeni tik gelebilir ve bu nedenle veriler güncelliğini yitirebilir.

//------------------------------------------------ ------------------------------

OrderSend işlevini çalıştırmadan önce bu işlevi eklemeyi deneyin.

Santimetre. :

Açma ve sipariş verme 2008-05-05 14:26:13

"Programın minimum sayıda reddedilen işlem emriyle istikrarlı bir şekilde çalışması için, OrderSend() işlevini çalıştırmadan önce, MarketInfo() ve RefreshRates kullanarak program tarafından kullanılan bilgi ortamının parametrelerini güncellemek gerekir ( ) işlevler."

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

yardımcı olmuyor...