MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 38

 
Vitalie Postolache :

Duck, sağlandığı için argümanı işleve iletir. Kaldırmak daha iyi olsa da, bir totoloji olduğu ortaya çıkıyor.

Ve döngüde, tüm siparişler yeniden hesaplanmayacak.

for (i= OrdersTotal ()- 1 ; i> = 0 ; i--)
Ve hesabın durumu, biletle karşılaştırıldığında, bir bilette birden fazla siparişiniz var mı?
düzeltildi, argüman eklendi, global kapsama taşındı, şimdi bu argümanın diğer fonksiyonlarda girdi olarak kullanıldığına dair bir uyarı veriyor

biletin üzerine yaz, martin ile son siparişten çalış

ve o zaman 'count' bildiriminin nasıl kaldırılacağı, global bildirimi satırda gizler ...

olması gerektiği gibi çalışmasını sağlamak ilginç.

Şimdiye kadar, test cihazının sonuçlarına göre, bir yerde oldukça iyi bir çalışma veriyor, bir yerde hemen "Uzman Danışmanda aşılmaz hatalar"

 

Selamlar.

Şöyle bir girişe rastladım:

if ( OrderSelect (ticket, SELECT_BY_TICKET )) OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ;

Yani, burada koşullu if ifadesi yerine hemen bool türünde bir ticaret işlevi yazılmıştır. Böyle bir gösterimin şuna eşdeğer olduğunu doğru anlıyor muyum:

if ( OrderSelect (bilet, SELECT_BY_TICKET )) ==true { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; ?

Hem yardıma hem de ders kitabına baktım - bu formatın bir kaydını bulamadım.

Ve bir ifade yerine hemen farklı tipte fonksiyonlar yazmak mümkün müdür? Ve eğer öyleyse, algoritma ne olurdu?

 
trader781 :
düzeltildi, argüman eklendi, global kapsama taşındı, şimdi bu argümanın diğer fonksiyonlarda girdi olarak kullanıldığına dair bir uyarı veriyor

biletin üzerine yaz, martin ile son siparişten çalış

ve o zaman 'count' bildiriminin nasıl kaldırılacağı, global bildirimi satırda gizler ...

olması gerektiği gibi çalışmasını sağlamak ilginç.

Şimdiye kadar, test cihazının sonuçlarına göre, bir yerde oldukça iyi bir çalışma veriyor, bir yerde hemen "Uzman Danışmanda aşılmaz hatalar"

Düzeltilmiş versiyonu gösterin, aksi takdirde falcılık kodsuz olur.
 
spoiltboy :

Selamlar.

Şöyle bir girişe rastladım:

if ( OrderSelect (ticket, SELECT_BY_TICKET )) OrderModify (ticket, OrderOpenPrice (), SL, TP, 0 ;

Yani, burada koşullu if ifadesi yerine hemen bool türünde bir ticaret işlevi yazılmıştır. Böyle bir gösterimin şuna eşdeğer olduğunu doğru anlıyor muyum:

if ( OrderSelect (bilet, SELECT_BY_TICKET )) ==true { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; ?

Hem yardıma hem de ders kitabına baktım - bu formatın bir kaydını bulamadım.

Ve bir ifade yerine hemen farklı türde fonksiyonlar yazmak mümkün müdür? Ve eğer öyleyse, algoritma ne olurdu?

Bunun gibi if ( OrderSelect (ticket, SELECT_BY_TICKET )) ==true { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; çalışmaz.Koşul parantezlerin dışına atılamaz.

Ve bunun gibi if ( OrderSelect (ticket, SELECT_BY_TICKET ) ==true) { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; yapabilirsiniz.

 
Vitalie Postolache :

Bunun gibi if ( OrderSelect (ticket, SELECT_BY_TICKET )) ==true { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; çalışmaz.Koşul parantezlerin dışına atılamaz.

Ve bunun gibi if ( OrderSelect (ticket, SELECT_BY_TICKET ) ==true) { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; yapabilirsiniz.

Evet, bir braket ile kapatıldı. Sorunun geri kalanı alakalı.
 
Vitalie Postolache :
Düzeltilmiş halini gösterin, aksi takdirde kod olmadan falcılık elde edilir.

TAMAM.

Elinden geleni yapmış gibi görünüyor. Açıklama yapıldı. Amaç, neden istediğiniz gibi çalışmadığını anlamaktır.

Dosyalar:
count.mq4  19 kb
 
//+------------------------------------------------------------------+
//|                                                      ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss     = 1000 ; //Стоплосс ордера  
extern double TakeProfit   = 1500 ; //Тейкпрофит ордера
extern double TrailingStop = 1000 ; // трал
extern int     Delta        = 100 ; //Расстояние от цены для установки ордера
extern double LOT          = 0.1 ; //Объём позиции
extern int     Magic        = 200 ;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if (TrailingStop!= 0 ) Trailing();
  
   //ИНДИКАТОР RSI
   double RSI0= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 0 );
   double RSI1= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 1 );
  
   int b,s,p,res;
   double BuyPrice= Ask +Delta* Point ;
   double SellPrice= Bid -Delta* Point ;
  
   for ( int i= 0 ; i< OrdersTotal (); i++)
    {
     if ( OrderSelect (i, SELECT_BY_POS )== true )
      {  
         if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++;
         if ( OrderType ()== OP_BUYSTOP ) b++;
         if ( OrderType ()== OP_SELLSTOP ) s++;        
      }  
    }
       double SL,TP;
//---- buy stop
   if (RSI0> 50 &&RSI1< 50 )
     {
          
      res= OrderSend ( Symbol (), OP_BUYSTOP ,LOT,BuyPrice, 0 ,BuyPrice-StopLoss* Point ,BuyPrice+TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_SELLSTOP ,Blue);
     }        
//---- sell stop  
   if (RSI0< 50 &&RSI1> 50 )
     {

      res= OrderSend ( Symbol (), OP_SELLSTOP ,LOT,SellPrice, 0 ,SellPrice+StopLoss* Point ,SellPrice-TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_BUYSTOP ,Red );
     }
//---- buy stop делете
       if (RSI0< 50 &&RSI1> 50 )
    {
     OrderDelete ( OrderTicket ());
    
    }
//---- sell stop делете
       if (RSI0> 50 &&RSI1< 50 )
    {
     OrderDelete ( OrderTicket ());
    
    }
//----
   return ( 0 );
  }
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------

void Trailing()
{
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
       if ( OrderSymbol ()== Symbol ()|| OrderMagicNumber ()==Magic)
       if ( OrderType ()== OP_BUY )
         {
           if (TrailingStop> 0 )  
            {                
               if ( Bid - OrderOpenPrice ()>TrailingStop)
               {
                 if ( OrderStopLoss ()< Bid -TrailingStop)
                  {
                     OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TrailingStop, OrderTakeProfit (), 0 ,Green);
                  }
               }
            }
         }
        
         if ( OrderType ()== OP_SELL )
         {
           if (TrailingStop> 0 )  
            {                
               if (( OrderOpenPrice ()- Ask )>TrailingStop)
               {
                 if (( OrderStopLoss ()>( Ask +TrailingStop)) || ( OrderStopLoss ()== 0 ))
                  {
                     OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TrailingStop, OrderTakeProfit (), 0 ,Red);
                  }
               }
            }
         }  
   }
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
Siparişler silinmedi lütfen yardım edin
 

Siparişler silinmedi lütfen yardım edin
açılmamış siparişin biletini nasıl aldınız?
 
trader781 :
açılmamış siparişin biletini nasıl aldınız?
değil mi onu oraya ekleyemem
for ( int i= 0 ; i< OrdersTotal (); i++)
    {
     if ( OrderSelect (i, SELECT_BY_POS )== true )
      {  
         if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++;
         if ( OrderType ()== OP_BUYSTOP )
             if (сигнал_bue) OrderDelete ( OrderTicket ());
                 else b++;
         if ( OrderType ()== OP_SELLSTOP )
             if (сигнал_sell) OrderDelete ( OrderTicket ());
                 else s++;
      }  
    }
 
Movlat Baghiyev :
değil mi onu oraya ekleyemem
for ( int i= 0 ; i< OrdersTotal (); i++)
    {
     if ( OrderSelect (i, SELECT_BY_POS )== true )
      {  
         if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++;
         if ( OrderType ()== OP_BUYSTOP )
             if (сигнал_bue) OrderDelete ( OrderTicket ());
                 else b++;
         if ( OrderType ()== OP_SELLSTOP )
             if (сигнал_sell) OrderDelete ( OrderTicket ());
                 else s++;
      }  
    }
Bunu nasıl açıklayacağımı bilmiyorum. Ama kesinlikle bir başyapıt.