[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 120

 

çok hata veriyor


 

Üzgünüm, alex12 , ama kodlayıcı gibi görünüyorsun (alınma, kabul edilen terim bu). Farklı parçalardan bir şeyler uyduruyorsunuz ve bir şekilde derlenmesini sağlıyorsunuz, ancak kodun anlamını anlamadan.

İş Servisi ile iletişime geçin.

 
alex12 :

çok hata veriyor


Igor Kim'in bazı fonksiyonlarını kullanarak, derleyicinin size bildirdiği, kodunuzdaki eksik fonksiyonları, onu kullanılabilir hale getirmek için zahmete girin. Onları şubesinde bulun ve kodunuza yazın.
 
chief2000 :
...

OrderOpenTime() pozisyonun açılış zamanını gösterir, soru şudur STOP emrinin verildiği zamanı nasıl öğrenebiliriz?
Bu sefer MT4 raporunda mevcut ama koddan bunu öğrenmek mümkün mü?


Tekrar.

Tüm durdurma emirleriniz arasında "standart" döngüden geçin ve aynı zamanda onlar için OrderOpenTime() değerini yazdırın - bu onların (her birinin) ayarlandığı zaman olmalıdır. Piyasa emirleri için bir örnek veriyorum - biraz düzeltebilirsiniz, yani. veya sadece bu satırı kaldırın

eğer ((orderType != OP_BUY) && (orderType != OP_SELL)) devam ederse;

veya ilgilendiğiniz duraklardan gelen verilerle değiştirin...

 int orderCount = 0 ; // сбрасываем счетчик ордеров 
       // ------------------------------------------------Считаем только наши ордера---------------------------
   int orderType;
   for (orderIndex = ( OrdersTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {
       if (! OrderSelect (orderIndex, SELECT_BY_POS))     continue ; // если ордер не выбран, то идем на следующий открытый
       if ( OrderCloseTime ()!= 0 ) continue ;                           // если тикет принадлежит закрытому ордеру, то берем следующий открытый
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != magic))   continue ;
      orderType = OrderType ();
       if ((orderType != OP_BUY) && (orderType != OP_SELL))   continue ;
          ticket = OrderTicket ( );                         // Номер ордера
          orderLots = OrderLots ();                         // Lots   
          orderProfit = OrderProfit () + OrderSwap ();       // Profit
          Price = OrderOpenPrice ();                         // Цена открытия рыночного ордера
          SL =   OrderStopLoss ();                           // Значение StopLoss ордера
          TP = OrderTakeProfit ();                           // Значение TakeProfit ордера 
          Time = O rderOpenTime();
         
                     
         
      orderCount++;                     // считаем ордера (не больше i)           

    }   
 
Roman. :


Tekrar.
Tüm durdurma emirleriniz arasında "standart" döngüden geçin ve aynı zamanda onlar için OrderOpenTime() değerini yazdırın - bu onların (her birinin) ayarlandığı zaman olmalıdır. Piyasa emirleri için bir örnek veriyorum - biraz düzeltebilirsiniz, yani. veya sadece bu satırı kaldırın

((orderType != OP_BUY) && (orderType != OP_SELL)) devam ederse;

veya ilgilendiğiniz duraklardan gelen verilerle değiştirin...

Bu aşamada bir ikilemle karşılaştım - bazı "istatistikler" için bir STOP emri açmak için zamana ihtiyacım var ve bu sürecin her zaman başlatılmasını istemem, sadece belirli bir son aşamada başlatılmasını istiyorum. Bu nedenle, şu anda açık olmayan siparişleri sıralamak (OrdersTotal() ), ancak zaten kapalı olan siparişler arasında arama yapmak => OrdersHistoryTotal() gereklidir.
Ancak zaten kapalı STOP emirleri için OrderOpenTime() emrin verildiği zamanı değil , pozisyon açılış zamanını döndürür.
Sonunda, her şey buna bağlı - OrdersHistoryTotal() listesinden STOP siparişlerinin ayarlandığı zamanı çıkarmaları mümkün mü?
 
chief2000 :
Bu aşamada bir ikilemle karşılaştım - bazı "istatistikler" için bir STOP emri açmak için zamana ihtiyacım var ve bu sürecin her zaman başlatılmasını istemem, sadece belirli bir son aşamada başlatılmasını istiyorum. Bu nedenle, şu anda açık olmayan siparişleri sıralamak (OrdersTotal() ), ancak zaten kapalı olan siparişler arasında arama yapmak => OrdersHistoryTotal() gereklidir.
Ancak zaten kapalı STOP emirleri için, OrderOpenTime() emrin verildiği zamanı değil, pozisyonun açıldığı zamanı döndürür.
Sonunda, her şey buna bağlı - OrdersHistoryTotal() listesinden STOP siparişlerinin ayarlandığı zamanı çıkarmaları mümkün mü?

Evet... Sorun... HZ. İmkansız görünüyor - özellikle "son aşamada" ...

Bu süreci sürekli olarak izlemek ve takip etmek gerekir - önceki sayfadaki SSS gönderisine bakın. sayfa.

 
Roman. :

Evet... Sorun... HZ. İmkansız görünüyor - özellikle "son aşamada" ...

Bu süreci sürekli olarak izlemek ve takip etmek gerekir - önceki sayfadaki SSS gönderisine bakın. sayfa.

Başka bir çözüm yoksa, OrdersTotal() 'dan gelen siparişleri kullanacağım.
Her durumda, teşekkürler!
 
Bu durumda, bir dosyaya yazmak daha kolaydır, daha az saçmalık vardır ve istatistikler, terminal değil, ihtiyacınız olduğu gibi düzenlenebilir.
 
FAQ :
Bu durumda, bir dosyaya yazmak daha kolaydır, daha az saçmalık vardır ve istatistikler, terminal değil, ihtiyacınız olduğu gibi düzenlenebilir.
Teşekkür ederim!
 

Cımbız kalıbı için Uzman Danışman yazmak istiyorum.

açılış koşulu olarak seçilen

Low2=Low[ iLowest ( NULL , 0 ,MODE_LOW, 10 , 2 )]    
High2=High[ iHighest ( NULL , 0 ,MODE_HIGH, 10 , 2 )]     

if (Low[ 1 ]==Low2) bull_pincet=true;
if (High[ 1 ]==High2) bear_pincet=true;

   while (true)
      {
       
       if (Total== 0 && bull_pincet==true )
        {
         sl=Low[ 1 ];
         if (sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend (Symb,OP_BUY,Lts,Ask, 3 ,sl,tp);
         return ;
        }

         if (Total== 0 && bear_pincet==true )
         {
          sl=High[ 1 ];
           if (sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
           OrderSend (Symb,OP_SELL,Lts,Bid, 3 ,sl,tp);
           return ;
         }
       break ;
      }   

Maalesef koşulun yanlış olduğu ortaya çıktı, çünkü 'sl' 100.000000 fiyatına ayarlandı ve 'tp' genellikle bir hata gösteriyor.

Bir koşul eklemeye karar verdim, 1 onay işaretini dikkate alın.

 static datetime TimeSaveH1  = 0 ;
int init()
{
     TimeSaveH1  = iTime ( Symbol (), Period (), 0 ); // берем открытия время текущего бара
}

int start()
{
         if (TimeSaveH1!= iTime ( Symbol (), Period (), 0 ))
            {
               TimeSaveH1= iTime ( Symbol (), Period (), 0 ); 
            }  

Low2=Low[ iLowest ( NULL , 0 ,MODE_LOW, 10 , 2 )]    
High2=High[ iHighest ( NULL , 0 ,MODE_HIGH, 10 , 2 )]     

if (Low[ 1 ]==Low2 && TimeSaveH1=== iTime ( Symbol (), Period (), 0 ) bull_pincet=true;
if (High[ 1 ]==High2 && TimeSaveH1=== iTime ( Symbol (), Period (), 0) bear_pincet=true;
   while (true)
      {
       
       if (Total== 0 && bull_pincet==true )
        {
         sl=Low[ 1 ];
         if (sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend (Symb,OP_BUY,Lts,Ask, 3 ,sl,tp);
         return ;
        }

         if (Total== 0 && bear_pincet==true )
         {
          sl=High[ 1 ];
           if (sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
           OrderSend (Symb,OP_SELL,Lts,Bid, 3 ,sl,tp);
           return ;
         }
       break ;
      }   




}

Sonuç aynı. sorunumu nasıl çözebilirim?

Neden: