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

 


RefreshRates() işlevini kullanmanın doğru yolu nedir?

 int ticket ;
   while ( true )
     {
      ticket = OrderSend ( Symbol ( ) , OP_BUY , 1.0 , Ask , 3 , 0 , 0 , "комментарий эксперта" , 255 , 0 , CLR_NONE ) ;
      if ( ticket < = 0 )
        {
         . . . . . .
         RefreshRates ( ) ;
        }
      else
        {
         . . . . .
        }
     }

Ayrıca forumda okudum " HATA: kod = 138 - yeniden alıntı"

Test cihazında saniyede birkaç kez "OrderSend hatası 138" oluşturuldu. Bu bir yeniden fiyat teklifi mi? Eğer öyleyse, bununla nasıl başa çıkılır?)

 

Requotes hakkında 20 konu okuduktan sonra... Sonunda hatamın ne olduğunu anladım)

" Sahte " bir alıntı yaptım. Bunun nedeni, işe yarayan giriş koşuluydu ve buna bağlı olarak fiyat aktarıldı.. Ama gerçekte, gerçek fiyat, açıklanandan daha düşük veya daha yüksekti. Ve OrderSend her sipariş açmaya çalıştığında, doğal olarak 138 hatası veriyordu.

Çözüm, gerçek fiyatın, sinyal tarafından iletilen fiyata eşit olup olmadığını, OrderSend'den önce kontrol etmekti)

 RefreshRates ( ) ;
      if ( Bid = = ( цена переданная сигналом на продажу ) )
         OrderSend ( . . . . ) ; //продажа

Geriye OrderModify siparişleri için hataları kontrol etmek kalıyor. bu, kötü sonuçlara yol açabilir - bir dur dememek!

OrderSend için bence kontrol etmeye gerek yok, sinyalin verdiği fiyatta nabız kaybolana kadar atsın) Tekrar fiyat teklifi gelirse kritik değil.. Alıp satacak zamanım olacak. Ana şey, her şeyin plana göre çalışmasıdır)

 
ALex2008 писал(а) >>

Requotes hakkında 20 konu okuduktan sonra... Sonunda hatamın ne olduğunu anladım)

" Sahte " bir alıntı yaptım. Bunun nedeni giriş koşulunun işlemesi ve buna bağlı olarak fiyatın OrderSend'e aktarılmasıydı.Aslında gerçek fiyat OrderSend'de belirtilenden düşük veya yüksekti. Ve OrderSend her sipariş açmaya çalıştığında, doğal olarak 138 hatası veriyordu.

Çözüm, gerçek fiyatın, sinyal tarafından iletilen fiyata eşit olup olmadığını, OrderSend'den önce kontrol etmekti)

OrderModify siparişleri için hataları kontrol etmek için kalır. bu, kötü sonuçlara yol açabilir - durmadan!

OrderSend için bence kontrol etmeye gerek yok, sinyalin verdiği fiyatta nabız kaybolana kadar atsın) Tekrar fiyat teklifi gelirse kritik değil.. Alıp satacak zamanım olacak. Ana şey, her şeyin plana göre çalışmasıdır)

Yenileme Oranları ( ) ;
Ask Bid ile iletişime geçmeden önce yapılması yararlı olur

stop alma ve giriş fiyatını sayan bloktan önce - bu, hesaplamaları cari fiyattan alınmadığı takdirde uzak gecikmeler için geçerli olmayabilir

 
YuraZ >> :

Yenileme Oranları ( ) ;
Ask Bid ile iletişime geçmeden önce yapılması yararlı

Bunu ben yapmadım mı?.. Bid ile iletişime geçmeden önce

if (Bid == (цена переданная сигналом на продажу))

stop alma ve giriş fiyatını sayan bloktan önce - bu, hesaplamaları cari fiyattan alınmadığı takdirde uzak gecikmeler için geçerli olmayabilir

Lütfen açıklayın.. Yani. benim durumumda burada gerekli değil mi? çünkü sayma ama karşılaştır? doğru mu anladım
 
ALex2008 писал(а) >>

Bunu ben yapmadım mı?.. Bid ile iletişime geçmeden önce


Lütfen açıklayın.. Yani. benim durumumda burada gerekli değil mi? çünkü saymayın ama karşılaştırın? doğru mu anladım

Her şeyi doğru yaptın :-)

engel olamayacak!

sadece fiyatlara baktığınız bir bloğunuz var, tercihen tek bir yerde olmalı

ve bu komuta sahip olmak için aramadan önce olması tercih edilir.

Tüm durakları hesapladıktan sonra Teklif Sor'a döndüğünüzde hemen bir girişiniz olmalı! çok gecikmeden piyasaya

---

bunu kodunuza eklersiniz

basitçe ver

1-sinyal alındı - yürütme bayrağını kaldırdı

2-refresh() alma-durma hesaplaması

3-giriş

4 sunucu reddedildi

5-hatanın kodunu çöz

6-sinyal hala aktif - yürütme bayrağı ayarlandı mı?

7- n 1'e git

ve yetkin bir şekilde bu döngüyü kırmak gerekiyor

çünkü oldukça uzun olabilir

ama ihtiyacın var

1-hatayı belirleyin

2 döngünün gerektirdiği kadar uzun süre krupiyeyi vurmaya çalışın

2.1 örneğin kaç kere çekiçlemek için bir sayaç yapabilirsiniz

2.2 Zamanın kuantumu üzerinde çekiçle vurabilirsiniz

2.3 Her seriden önce, çalıştırma komutları vermeden önce bir sinyal olup olmadığını izlemek GEREKİR!

belki iptal etme zamanı gelmiştir

 
YuraZ >> :

...sadece fiyatlara baktığınız bir bloğunuz var, tercihen tek bir yerde olmalı

ve bu komuta sahip olmak için aramadan önce olması tercih edilir.

Tüm durakları hesapladıktan sonra Teklif Sor'a döndüğünüzde hemen bir girişiniz olmalıdır! çok gecikmeden piyasaya

Bir yerde .. Tam olarak anlamadım .. Problemin mantığı ile) Uzun süredir indikatör yapıyorum ve döngüyü tamamlayamıyorum)))

Benim için böyle görünüyor:

- giriş fiyatı, bir sinyali kontrol eden UpTrend() ve DownTrend() işlevleri tarafından verilir

- sinyaldeki fiyat ile fiyatın eşitliğini kontrol edin (eğer)

- giriş fiyatı vb. OrderSend'de işlenir

- Stop fiyatı, OrderSend'i takip eden ModifyPos() fonksiyonunda işlenir.


1-sinyal alındı - yürütme için bayrağı ayarlayın //sinyal kontrol işlevi sipariş ayarlama işlevini geçer
2-refresh() kalkış noktalarının hesaplanması // fiyatın sinyalden alınan fiyatla eşleşip eşleşmediğini kontrol etme (hala geçerliyse)
3-giriş // alma hesaplaması OrderSend'de statiktir, OrderModify işlevinde durmalar hesaplanır
4-server reddedildi //emir verilmediyse ve sinyal geçerliyse sinyalin fiyatından tekrar giriyoruz (hala geçerliyse)
5-hatanın kodunu çözün // kendinize ihtiyacınız var, aniden yeni bir sorun ..
6-sinyal hala aktif - yürütme bayrağı ayarlandı mı? // fiyatı eşleştirme koşulu - sinyalden gelen fiyat (hala geçerliyse)
7- n 1 // n 3'e gidin

ve yetkin bir şekilde bu döngüyü kırmak gerekiyor
çünkü oldukça uzun olabilir // fiyat == sinyal fiyatı olduğu sürece uzun olabilir, bence çok uzun değil ama sık olabilir)
ama ihtiyacın var

1-hatayı belirleyin // bugün bunun üzerinde çalışmayı düşünüyorum forumda örneklere bakacağım
2 döngünün gerektirdiği sürece satıcıyı dövmeye çalışın //price==sinyal fiyatı
2.1 örneğin, kaç kez çekiçlemek için bir sayaç yapabilirsiniz // bunun hakkında düşünmeniz gerekir, test cihazındaki geçmişe bakın
2.2 zaman kuantumuna vurabilirsiniz // Fiyatı atlayabilirim == sinyalin fiyatı (hala geçerliyse)
2.3 Her seriden önce, çalıştırma komutları vermeden önce bir sinyal olup olmadığını izlemek GEREKİR!
aksi takdirde iptal etme zamanı gelebilir // sinyal kontrol fonksiyonu sipariş ayar fonksiyonlarını geçer


 

Şimdi OrderModify'ı nasıl düzgün bir şekilde uygulayacağımı anlamıyorum? Onsuz, açılışta DC'nin durmasını .. kısıtlamasını ayarlayamıyorum ..

- Açılıştan sonra fiyat değişirse ve daha yakınsa 130 hatası alabilirsiniz

- 138 requotes hatası alabilirsiniz ve fiyat yükselir ve ardından stop hiç ayarlanmaz

- 138 teklif hatası alabilirsiniz ve fiyat düşer, bu kritik değildir, çünkü yüklemeyi daha sonra durdur

Böyle...

сигнал действует

RefreshRates
( ) ;
      if ( Bid = = ( цена сигнала ) )
         {
            OrderSend ( Symbol ( ) , OP_SELL , Lot , ( Low_candl - Proboy * Point ) , Slippage , 0 , ldTake , lsComm , MAGIC , 0 , clOpenSell ) ;
            OrderModify(.... ) ;
         }  

Bu seçeneğin eksileri

- fiyat açılış fiyatının altına düşerse stop asla yapılmaz

- koşul karşılanırken sürekli olarak sırayı değiştirmeye çalışır. Yoksa olmayacak mı?


ya da öyle...


сигнал действует

RefreshRates
( ) ;
      if ( Bid = = ( цена сигнала ) )
         OrderSend ( Symbol ( ) , OP_SELL , Lot , ( Low_candl - Proboy * Point ) , Slippage , 0 , ldTake , lsComm , MAGIC , 0 , clOpenSell ) ;
OrderModify ( . . . . ) ;  

Bu seçeneğin eksileri

- fiyat ters giderse çok fazla hata 130 olacak


 

Durakta böyle bir seçenek düşünürken, ayarlanana kadar bahis yapın)

 void ModifyPos ( )
   {
        if ( OrderSelect ( 0 , SELECT_BY_POS ) = = true ) // Если есть открытый ордер
            { 
               if ( OrderType ( ) = = OP_BUY )
                     double SLB = Bid - Stop * Point ;
                     bool ModifyB = OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , SLB , OrderTakeProfit ( ) , 0 , Red ) ;
                        if ( ModifyB = = false )
                           for ( int i = 0 ; ModifyB = = true ; i + + )
                              {
                                 SLB = SLB + i * Point ;
                                 RefreshRates ( ) ;
                                 ModifyB ;
                              }
               if ( OrderType ( ) = = OP_SELL )
                     double SLS = Ask + Stop * Point ;
                     bool ModifyS = OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , SLS , OrderTakeProfit ( ) , 0 , Red ) ;
                        if ( ModifyS = = false )
                           for ( int j = 0 ; ModifyS = = true ; j + + )
                              {
                                 SLS = SLS + j * Point ;
                                 RefreshRates ( ) ;
                                 ModifyS ;
                              }                                                   
            }      
   }

Ama ModifyB ile satırlarda hatalar var ; DeğiştirB ;

-';' - değişken zaten tanımlanmış

-';' - değişken zaten tanımlanmış


 

Başka bir seçenek, ancak aynı zamanda hatalarla (

 void ModifyPos ( )
   {
        if ( OrderSelect ( 0 , SELECT_BY_POS ) = = true ) // Если есть открытый ордер
            { 
               if ( OrderType ( ) = = OP_BUY )
                     double SLB = Bid - Stop * Point ;
                     bool ModifyB = OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , SLB , OrderTakeProfit ( ) , 0 , Red ) ;
                        if ( ModifyB = = false )
                           for ( int i = 0 ; ; i + + )
                              {
                                 SLB = SLB + i * Point ;
                                 RefreshRates ( ) ;
                                 bool ModifyB = OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , SLB , OrderTakeProfit ( ) , 0 , Red ) ;
                                    if ( ModifyB = = true )
                                       continue ; 
                              }
               if ( OrderType ( ) = = OP_SELL )
                     double SLS = Ask + Stop * Point ;
                     bool ModifyS = OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , SLS , OrderTakeProfit ( ) , 0 , Red ) ;
                        if ( ModifyS = = false )
                           for ( int j = 0 ; ; j + + )
                              {
                                 SLS = SLS + j * Point ;
                                 RefreshRates ( ) ;
                                 bool ModifyS = OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , SLS , OrderTakeProfit ( ) , 0 , Red ) ;
                                    if ( ModifyS = = true )
                                       continue ; 
                              }                                                   
            }      
   }
 
ALex2008 писал(а) >>

Başka bir seçenek, ancak aynı zamanda hatalarla (

ticket = OrderSend ( symb , bs , lot , op , slippage , 0 , 0 , comm , magic ) ;
       if ( ticket = = - 1 ) {
Print ( "Не получилось открыть ордер, ошибка " , GetLastError ( ) ) ;
       }
       if ( ticket > 0 ) {
         OrderSelect ( ticket , SELECT_BY_TICKET ) ;
         if ( OrderType ( ) = = OP_BUY ) {
            sl = расчет стопа ;
            tp = расчет тейка ;
         }
         if ( OrderType ( ) = = OP_SELL ) {
            sl = расчет стопа ;
            tp = расчет тейка ;
         }
         . . . Проверка стопов на стоплевел
             if ( ! OrderModify ( ticket , OrderOpenPrice ( ) , sl , tp , 0 , CLR_NONE ) ) {
               Print ( "Не получилось модифицировать ордер, ошибка " , GetLastError ( ) ) ;
           }
Böyle deneyin.