Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 155

 

millet, lütfen koda bakın, yanlış olan ne? ilk danışmanım .. şu stratejiye göre çalışmalı: önce bir emir açılır (hangi yönde yani rastgele olduğu fark etmez) ve ters yönde iki katı hacimde bekleyen bir emir verilir, çünkü örneğin, satın alma yerleştirilmişse, satın alma işleminden 25 puan daha düşük bir satış durdurucu yerleştirilir ve satış ayarlanmışsa, satın alma durdurucu 25 puan daha yükseğe yerleştirilir. Bekleyen emirlerden biri tetiklenirse, tetiklenen emrin tersi yönünde ilk açık emrin fiyatından başka bir bekleyen emir veririz. aynı zamanda çalışırsa, bekleyeni tekrar tetiklenenden zıt yönde 25 nokta, vb. Bu nedenle, tüm alış emirleri aynı fiyattan olmalı ve tüm satış emirleri de aynı fiyattan olmalıdır. Burada yazdıklarımı anlayan varsa koda yardım etsin))

 int A = 0 ;
if ( OrdersTotal ()== 0 )
   {
   A = 0 ;
   if ( Close[ 2 ] < Close[ 1 ])
      {
       OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 3 ,Ask- 50 * Point ,Ask+ 25 * Point , 0 , 1 );                 // первый вариант событий
       OrderSend ( Symbol (),OP_SELLSTOP, 2 ,Bid- 25 * Point , 3 ,Bid+ 25 * Point ,Bid- 50 * Point , 0 , 2 );
      A= 1 ;
      }
      
   if ( Close[ 2 ] > Close[ 1 ])
      {
       OrderSend ( Symbol (),OP_SELL, 1 ,Bid, 3 ,Bid+ 50 * Point ,Bid- 25 * Point , 0 , 1 );               //второй вариант событий
       OrderSend ( Symbol (),OP_BUYSTOP, 2 ,Ask+ 25 * Point , 3 ,Ask- 25 * Point ,Ask+ 50 * Point , 0 , 2 );
      A= 2 ;
      }
   }
//------------------------------------------------------------------------------------------------------------------+
OrderSelect ( 1 ,SELECT_BY_TICKET,MODE_TRADES);             //цена открытия первого ордера
int price = OrderOpenPrice();
//------------------------------------------------------------------------------------------------------------------+   
int sells = 0 ;                                                                                                                              
for ( int B = 0 ; B < OrdersTotal (); B++)
   {
   OrderSelect (B,SELECT_BY_POS,MODE_TRADES);       //количество ордеров sell
   if (OrderType() == OP_SELL) sells++;
   }
   
int buys = 0 ;                                                                                                                        
for ( int b = 0 ; b < OrdersTotal (); b++)
   {
   OrderSelect (b,SELECT_BY_POS,MODE_TRADES);       //количество ордеров buy 
   if (OrderType() == OP_BUY) buys++;
   }
int sellstops = 0 ;                                                                                                                              
for ( int C = 0 ; C < OrdersTotal (); C++)
   {
   OrderSelect (C,SELECT_BY_POS,MODE_TRADES);       //количество ордеров sellstop
   if (OrderType() == OP_SELL) sellstops++;
   }

int buystops = 0 ;                                                                                                                        
for ( int c = 0 ; c < OrdersTotal (); c++)
   {
   OrderSelect (c,SELECT_BY_POS,MODE_TRADES);       //количество ордеров buystop 
   if (OrderType() == OP_BUY) buystops++;
   }
//-----------------------------------------------------------------------------------------------------------------+
if ( OrdersTotal ()== 1 )
   {                                               //удаление отложенного ордера..
   OrderDelete( 2 );                                 //..который остался после срабатываения tp и sl
   }  
//-----------------------------------------------------------------------------------------------------------------+
if ( OrdersTotal ()> 1 && A == 1 )
   {
   if (sells == buys && buystops == 0 )
      {
       OrderSend ( Symbol (),OP_BUYSTOP, 2 ,price, 3 ,price- 50 * Point ,price+ 25 * Point , 0 , 2 );     //условия для первого варианта
      }
   if (buys > sells && sellstops == 0 )
      {
       OrderSend ( Symbol (),OP_SELLSTOP, 2 ,price- 28 * Point , 3 ,price+ 22 * Point ,price- 53 * Point , 0 , 2 );
      }
   }
   
if ( OrdersTotal ()> 1 && A == 2 )
   {
   if (sells == buys && sellstops == 0 )
      {
       OrderSend ( Symbol (),OP_SELLSTOP, 1 ,price, 3 ,price+ 50 * Point ,price- 25 * Point , 0 , 2 );     //условия для второго варианта
      }
   if (buys < sells && buystops == 0 ) 
      {
       OrderSend ( Symbol (),OP_BUYSTOP, 2 ,price+ 22 * Point , 3 ,price- 28 * Point ,price+ 47 * Point , 0 , 2 );
      }
   }
//-----------------------------------------------------------------------------------------------------------------+
   
   return ( 0 );
   }
 
artmedia70 :
Ve bir göstergeden mi yoksa bir danışmandan mı? Bir fark var. Genel anlamda, ok çizmemek için, göstergede komşu önceki çubuğu kontrol etmeniz gerekir ve sıfır olmayan ve boş olmayan bir değere sahipse, komşu çubukta zaten bir ok vardır ve orada değeri geçerli çubuğun arabelleğine girmeye gerek yoktur. Ayrıca Uzman Danışman için, komşu önceki çubukta halihazırda mevcut olanla aynı yönde bir geçiş gerçeği varsa ve bu gerçek zaten bir okla işaretlenmişse, mevcut çubukta geçiş gerçeği olabilir kaydedilmez (eğer varsa) ve ok da gerekli olmadığında görüntülenebilir.
Kodunuzdan başka bir şey öneremem. Yakınlarda telepatlar varsa, muhtemelen verdiğiniz kodu daha iyi anlayabileceklerdir ;)

Bu göstergeden. 2 hareketli ortalamanın kesişimi yön verir. Tam olarak anlamadım, yön her barda değil, sadece karşıya geçerken veriyor. Buradan bir önceki çubuğa bakarak hüküm vermek mümkün değil.... Söylesene, dizi mi topluyoruz? Önceki hücre nasıl kontrol edilir? İki arabellek, biri CrossUp[i]=Düşük[i] - Aralık*0.75;, diğeri ise Cr[i]=Düşük[i] + Aralık*0.75;
 
zaqwsx123 :

millet, lütfen koda bakın, yanlış olan ne? ilk danışmanım .. şu stratejiye göre çalışmalı: önce bir emir açılır (hangi yönde yani rastgele olduğu fark etmez) ve ters yönde iki katı hacimde bekleyen bir emir verilir, çünkü örneğin, satın alma yerleştirilmişse, satın alma işleminden 25 puan daha düşük bir satış durdurucu yerleştirilir ve satış ayarlanmışsa, satın alma durdurucu 25 puan daha yükseğe yerleştirilir. Bekleyen emirlerden biri tetiklenirse, tetiklenen emrin tersi yönünde ilk açık emrin fiyatından başka bir bekleyen emir veririz. aynı zamanda çalışırsa, bekleyeni tekrar tetiklenenden zıt yönde 25 nokta, vb. Bu nedenle, tüm alış emirleri aynı fiyattan olmalı ve tüm satış emirleri de aynı fiyattan olmalıdır. Burada yazdıklarımı anlayan varsa koda yardım etsin))

Saçma sapan yazdın ... En azından bu:

 OrderSelect ( 1 ,SELECT_BY_TICKET,MODE_TRADES);             //цена открытия первого ордера

siparişin seçildiğinden emin misin? Fiyatın bu olduğuna emin misin? Siparişin bileti == 1 olduğundan emin misiniz? Biletle seçim yaparken havuz önemli değildir, bu nedenle MODE_TRADES orada gereksizdir. Biletle başarılı bir seçimden sonra, seçilen siparişin kapanış saatini de kontrol etmeniz gerekir. == 0 ise emir piyasadadır ve piyasa emirleri listesinden seçilir, kapanış zamanı > 0 ise emir kapanır veya uzak bekleyen emirdir ve kapalılar listesinden seçilir. emirler.

Kodu daha fazla incelemek istemezsiniz ... Muhtemelen, önce temel bilgileri öğrenmeniz gerekir. Öğreticiyi ve belgeleri okuyun - burada göze çarpan bir yerdeler.

 
artmedia70 :


Koda daha fazla bakmak istemiyorum ...


gözüme takılan bir şey)) Neden 4 özdeş döngü? ve örnek yorumdaki gibi değil

 if (OrderType() == OP_BUY) buystops++   //количество ордеров buystop

selstop ile benzer şekilde. OP_BUYSTOP ve OP_SELLSTOP gerekir

 
ALXIMIKS :


gözüme takılan bir şey)) Neden 4 özdeş döngü? ve örnek yorumdaki gibi değil

selstop ile benzer şekilde. OP_BUYSTOP ve OP_SELLSTOP gerekir

Ben buna gelmedim. Koda baktığınızda ve hataları açıklamak zorunda olmadığınızı gördüğünüzde, ancak bir kişiye kendisinin okuyabileceği temelden öğretmeye başlayın, o zaman ... hiçbir arzu ve arzu yoktur. Ücretli olarak çalışabilirsiniz, ancak yalnızca koddaki hataları bulmanıza yardımcı olduğunuz yerde değil, hatalar arasındaki kodu değil.
 
Zolotai :

Bu göstergeden. 2 hareketli ortalamanın kesişimi yön verir. Tam olarak anlamadım, yön her barda değil, sadece karşıya geçerken veriyor. Buradan bir önceki çubuğa bakarak hüküm vermek mümkün değil.... Söylesene, dizi mi topluyoruz? Önceki hücre nasıl kontrol edilir? İki arabellek, biri CrossUp[i]=Düşük[i] - Aralık*0.75;, diğeri ise Cr[i]=Düşük[i] + Aralık*0.75;
Kaynak veri yok. Burada aramayı deneyin.
 
Yürütmeden önce silinen bir BUY_STOP emri var:




Güvenlik Kodu:
             for ( int cnt_1=OrdersHistoryTotal()- 1 ; cnt_1>= 0 ; cnt_1--) {
               if ( OrderSelect (cnt_1, SELECT_BY_POS, MODE_HISTORY)== true ) {
                   if (OrderSymbol()== Symbol ()   &&   OrderCloseTime()!= 0    &&   OrderMagicNumber()==My_Magic_Number ) {
                     Print ( "OrderProfit()=" ,OrderProfit(), "   OrderCloseTime()=" ,TimeToStr(OrderCloseTime(),TIME_DATE|TIME_SECONDS), "   OrderType()=" ,OrderType(), "   OrderTicket()=" ,OrderTicket(), "   OrderClosePrice()=" ,OrderClosePrice(), "   OrderOpenPrice()=" ,OrderOpenPrice() );
                  } // if(OrderSymbol()==Symbol()   &&   OrderCloseTime()!=0   &&   OrderMagicNumber()==My_Magic_Number ) {
               }
            } // for(int cnt_1=0; cnt_1<OrdersHistoryTotal(); cnt_1++) {

Sonuç satırı:
OrderProfit()= 0    OrderCloseTime()= 2001.01 . 26 06 : 15 : 00    OrderType()= 4    OrderTicket()= 24    OrderClosePrice()= 0.9237    OrderOpenPrice()= 0.9419

1, OrderType=4 - "4" OP_SELLLIMIT mi?
2. OrderClosePrice()=0.9237 OrderOpenPrice()=0.9419 - OrderClosePrice() ile OrderOpenPrice() eşit değil nereden geldi?

 
chief2000 :

Yürütmeden önce silinen bir BUY_STOP emri var:




Güvenlik Kodu:

Sonuç satırı:

1, OrderType=4 - "4" OP_SELLLIMIT mi?
2. OrderClosePrice()=0.9237 OrderOpenPrice()=0.9419 - OrderClosePrice() ile OrderOpenPrice() eşit değil nereden geldi?

ve görselleştirme modunda test cihazındasınız, evet, tüm keneler için, adım adım modda (duraklamada F12), kaldırılma anını bulun ve mevcut fiyata bakın, belki köpek orada aradı?
 
artmedia70 :
ve görselleştirme modunda test cihazındasınız, evet, tüm keneler için, adım adım modda (duraklamada F12), kaldırılma anını bulun ve mevcut fiyata bakın, belki köpek orada aradı?


BİNGO! Bilmiyordum ama herşey senin yazdığın gibi yani. bu durumda kapanış fiyatı , emrin silindiği andaki fiyatın değeridir. Teşekkür ederim!
 

Genellikle bunun gibi işlevlerin içinde bir tür değişkeni bildirdim:

 int err = GetLastError ();

Daha içeride, bir koşul altında, bir hata olup olmadığını görmek için onu zaten aradım. Valla bu sadece bende değil bir çok yerde karşılaştığım kodlarda var. Yani tipik bir durum. Bugün, hataları kontrol etmek istediğiniz her fonksiyonda her seferinde aynı değişkeni bildirmenin mantıklı olmadığını düşündüm. Bir kez global olarak ilan etmenin ve init'te başlatmanın daha kolay olacağı sonucuna vardım. Bunun gibi bir şey:

 // Объявили на глобальном уровне
int err;

// Инициируем данную переменную:
int init()
{
    err = GetLastError ();
}

Daha sonra, zaten bir değeri olduğunu bilerek, kullanıcı tanımlı işlevlerde err değişkenini çağırmanız gerektiğinde. Aslında GetLastError () son hata kodunu verir, yani her fonksiyonda hata kodunun görüntülenmesinden ve GetLastError ()'un çağrılmasından sorumlu olan bu err değişkeni tüm hesaplamaların sonunda çağrılırsa, o zaman her şey doğru, değil mi?

Ancak diğer yandan, bir işlevin sonunda (uzman kod yürütme zinciri boyunca) çağırmazsanız, değişken sıfıra sıfırlanmaz ve bu, eğer bir hata varsa, yanlış yürütme ile tehdit eder. önceki kod yürütme zinciri, ancak şimdiki kodda değil, ANCAK son hata kodu döndürülür... ve onu sıfırlamak için bu GetLastError () işlevini çağırmanız gerekir. Onlar. her şey çağrılmış olup olmamasına bağlı. Her yerde böyle olacağına dair bir kesinlik yoksa, güvenli oynamak ve her seferinde sıfırlamak daha kolay, değil mi?