Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1115

 
Anladım, bu sadece bozuk bir dosya, ancak yürütülebilir dosya bütün, bu yüzden işe yarıyor ...
 
xxz :

......
danışman çalışıyor ancak editörde açmaya çalıştığınızda

......

xxx :

bu bir yürütülebilir dosya değil, bir mq5 dosyası...

bu benim kodum...

Peki, doğru ifadeleri oluşturun.

Bu konuda. Genelde böyle sorunlu olanları Notepad++ ile açarım. Yardım eder. Ama her zaman değil)))

 
Сергей Таболин :

Peki, doğru ifadeleri oluşturun.

Bu konuda. Genelde böyle sorunlu olanları Notepad++ ile açarım. Yardım eder. Ama her zaman değil)))

bu yüzden bazı editörlere bakmaya karar verdim ve dosya boyutu olması gerektiği gibi normal olmasına rağmen neredeyse sadece sıfırlar var ...

 
Bu konuyla ilgili olmayan yorumlar " MQL4 MT4 MetaTrader 4 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 

Danışman tarafından yazılmıştır. İlk başta yazdığı kişi, birbiri ardına iki pozisyon açar. Bu sorunu kendim yeniden oluşturamam. Lütfen yardım et.

OnTick() işlevi

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick () {
   
   GetData();
   CheckForOpen();
   CheckForCloseCP();
   CheckForCloseAll();

}
//+------------------------------------------------------------------+

Konumların açılmasından yalnızca CheckForOpen() işlevi sorumludur, işte burada:

 enum opp_mode {
   DoClose,       // Close and reverse with initial lot
   DoReverse,     // Close and reverse (continue Martingale last lot)
   DoHedge,       // No closing reversal (Hedge mode)
};

// Trade & MM Section
input opp_mode Mode_opp    = DoHedge;     // Trading Mode

//+------------------------------------------------------------------+
//| Check for Open function                                          |
//+------------------------------------------------------------------+
void CheckForOpen() {

   if (!IsBarNew) return ;

double lot= 0 ;
positions=Positions();

   if (Signal==OP_BUY) {
       if (longs> 0 ) return ;
       if (shorts== 0 ) {     // First Order Placing
         Print ( "   *** MSG ***   " +msg);
         PlaceMarketOrder(OP_BUY, Lot, _ask, _SL, _TP);
      }
       if (shorts> 0 ) {
         if (Mode_opp==DoClose) {       // Closing by Opposite Signal
             Print ( "   *** MSG ***   " +msg);
             Print ( "   ***   Close mode SELL by opposite signal." ); 
            ClosePositions(OP_SELL);
            PlaceMarketOrder(OP_BUY, Lot, _ask, _SL, _TP);
         }
         if (Mode_opp==DoReverse) {     // Reverse by Opposite Signal
             Print ( "Reversing SELL by opposite signal." );
            lot=GetMaxLot( ORDER_TYPE_SELL );
             if (IsMartingale) lot=lot*LotMult;
            ClosePositions(OP_SELL);
            PlaceMarketOrder(OP_BUY, lot, _ask, _SL, _TP);
         }
         if (Mode_opp==DoHedge) {       // Hedging by Opposite Signal
             Print ( "Hedging SELL by opposite signal." ); 
            MartinCounterB= 50 ; MartinCounterS= 50 ;
            PlaceMarketOrder(OP_BUY, GetMaxLot( ORDER_TYPE_SELL )*LotMult, _ask, _SL, _TP);
         }
      }
   }
   if (Signal==OP_SELL) {
       if (shorts> 0 ) return ;
       if (longs== 0 ) {     // First Order Placing
         Print ( "   *** MSG ***   " +msg);
         PlaceMarketOrder(OP_SELL, Lot, _bid, _SL, _TP);
      }
       if (longs> 0 ) {
         if (Mode_opp==DoClose) {       // Closing by Opposite Signal
             Print ( "   *** MSG ***   " +msg);
             Print ( "   ***   Close mode BUY by opposite signal." ); 
            ClosePositions(OP_BUY);
            PlaceMarketOrder(OP_SELL, Lot, _bid, _SL, _TP);
         }
         if (Mode_opp==DoReverse) {     // Reverse by Opposite Signal
             Print ( "Reversing BUY by opposite signal." ); 
            lot=GetMaxLot( ORDER_TYPE_BUY );
             if (IsMartingale) lot=lot*LotMult;
            ClosePositions(OP_BUY);
            PlaceMarketOrder(OP_SELL, lot, _bid, _SL, _TP);
         }
         if (Mode_opp==DoHedge) {       // Hedging by Opposite Signal
             Print ( "Hedging BUY by opposite signal." ); 
            MartinCounterB= 50 ; MartinCounterS= 50 ;
            PlaceMarketOrder(OP_SELL, GetMaxLot( ORDER_TYPE_BUY )*LotMult, _bid, _SL, _TP);
         }
      }
   }
}
//+------------------------------------------------------------------+

Piyasadan bir pozisyon açmak için istek gönderen bir fonksiyon. Sunucu arızası durumunda gecikmeli bir tekrar eklendi. MetaQuotes MT5 demosunda test ederken, çok sık tekrar/teklif aldım.

 //+------------------------------------------------------------------+
//| Place Market Order function                                      |
//+------------------------------------------------------------------+
bool PlaceMarketOrder( int oper, double lot, double oop, double sl, double tp) {   //  mn - Magic Number

double d_sl= 0 , d_tp= 0 ;

   MqlTick stTick;
   if ( SymbolInfoTick ( _Symbol ,stTick)== false ) {
       Print ( "SymbolInfoTick function returned FALSE. Error=" , GetLastError ());
   }

   Print ( "Placing market order. Type=" +( string )oper+ ", OrderOpenPrice=" + DoubleToString (oop, _Digits )+
         ", Bid=" + DoubleToString (_bid, _Digits )+ ", Ask=" + DoubleToString (_ask, _Digits ));

   if ( MathAbs (lot-Lot)< 1 e- 5 ) {MartinCounterB= 0 ; MartinCounterS= 0 ;}
     
   if (oper==OP_BUY)  {
       for ( int i= 0 ; i< 5 ; i++) {
         if ( SymbolInfoTick ( _Symbol ,stTick)== false ) {
             Print ( "SymbolInfoTick function returned FALSE. Error=" , GetLastError ());
         }
         _ask=stTick.ask;
         d_sl=ND(_ask-sl*pips); if ( MathAbs (sl)< 1 e- 5 ) d_sl=ND( 0.0 );
         d_tp=ND(_ask+tp*pips); if ( MathAbs (tp)< 1 e- 5 ) d_tp=ND( 0.0 );
         if (m_trade.Buy(NormalizeLot(lot), NULL ,_ask,d_sl,d_tp,Comm)) { PlaySound ( "expert.wav" ); return ( true );}
         else { PlaySound ( "disconnect.wav" ); Sleep ( 5000 );}
      }
   }
   if (oper==OP_SELL) {
       for ( int i= 0 ; i< 5 ; i++) {
         if ( SymbolInfoTick ( _Symbol ,stTick)== false ) {
             Print ( "SymbolInfoTick function returned FALSE. Error=" , GetLastError ());
         }
         _bid=stTick.bid;
         d_sl=ND(_bid+sl*pips); if ( MathAbs (sl)< 1 e- 5 ) d_sl=ND( 0.0 );
         d_tp=ND(_bid-tp*pips); if ( MathAbs (tp)< 1 e- 5 ) d_tp=ND( 0.0 );
         if (m_trade.Sell(NormalizeLot(lot), NULL ,_bid,d_sl,d_tp,Comm)) { PlaySound ( "expert.wav" ); return ( true );}
         else { PlaySound ( "disconnect.wav" ); Sleep ( 5000 );}
      }
   }
     
   return ( false );
     
}
//+------------------------------------------------------------------+

Yeni bar açma kontrol fonksiyonu:

 //+------------------------------------------------------------------+
//| Global Variables                                                 |
//+------------------------------------------------------------------+
bool    IsBarNew= false ;


//+------------------------------------------------------------------+
//| Bar refreshing function                                          |
//| true - new bar opened, false - not opened                        |
//+------------------------------------------------------------------+
bool IsNewBar() {

static datetime SavedTime= iTime ( NULL , PERIOD_CURRENT , 0 );
       datetime curTime  = iTime ( NULL , PERIOD_CURRENT , 0 );

   if (curTime>SavedTime) {
         SavedTime=curTime;
         return ( true );
   }
   else return ( false );
}
//+------------------------------------------------------------------+

İkinci pozisyon, birinciden hemen sonra açılır, aynı saniyede biletler birer birer farklılık gösterir. Başlangıçta, danışmanın ikinci kopyasının ikinci çizelgede asılı olduğunu varsaydım, her şeyi kapatmamı, bir çizelge bırakmamı ve danışmanı başlatmamı istedi, ancak kelimelere ve müşterinin ekran görüntüsüne bakılırsa, bu değil. sebep. Sonraki pozisyonlar birer birer açılır, artık ikili yoktur. Çoğalamıyorum, zaten bu konuda kafamı kırdım. MT5 demo ICMarkets hedge'de müşteri olarak test ediliyor. Dubleksin ekran görüntüsü.


Tüm danışman.

Dosyalar:
 
Grigori.SB :

Danışman tarafından yazılmıştır. İlk başta yazdığı kişi, birbiri ardına iki pozisyon açar. Bu sorunu kendim yeniden oluşturamam. Lütfen yardım et.

OnTick() işlevi

Konumların açılmasından yalnızca CheckForOpen() işlevi sorumludur, işte burada:

Piyasadan bir pozisyon açmak için istek gönderen bir fonksiyon. Sunucu arızası durumunda gecikmeli bir tekrar eklendi. MetaQuotes MT5 demosunda test ederken, çok sık tekrar/teklif aldım.

Yeni bar açma kontrol fonksiyonu:

İkinci pozisyon, birinciden hemen sonra açılır, aynı saniyede biletler birer birer farklılık gösterir. Başlangıçta, danışmanın ikinci kopyasının ikinci çizelgede asılı olduğunu varsaydım, her şeyi kapatmamı, bir çizelge bırakmamı ve danışmanı başlatmamı istedi, ancak kelimelere ve müşterinin ekran görüntüsüne bakılırsa, bu değil. sebep. Sonraki pozisyonlar birer birer açılır, artık ikili yoktur. Tekrarlayamam, bu konuda kafamı çoktan kırdım. MT5 demo ICMarkets hedge'de müşteri olarak test ediliyor. Dubleksin ekran görüntüsü.


Tüm danışman.

Yeni bir çubuğu kontrol etmek için böyle bir işlev kullanıyorum - çubuğun tarihini kopyalarken hatalar oluyor.

 //+------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если появился новый бар на текущем ТФ
//+------------------------------------------------------------------------------------------------------------------+
bool isNewBar()
  {
   datetime tm[];
   static datetime prevBarTime= 0 ;

   if ( CopyTime ( _Symbol , 0 , 0 , 1 ,tm)< 0 )
     {
       Print ( "%s CopyTime error = %d" , __FUNCTION__ , GetLastError ());
     }
   else
     {
       if (prevBarTime!=tm[ 0 ])
        {
         prevBarTime=tm[ 0 ];
         return true ;
        }
       return false ;
     }
   return true ;
  }
 
Aleksey Vyazmikin :

Yeni bir çubuğu kontrol etmek için böyle bir işlev kullanıyorum - çubuğun tarihini kopyalarken hatalar oluyor.

Teşekkür ederim. değiştirmeye çalışacağım. Şimdiye kadar kullandığım işlev iyi çalıştı. Çubuğun açılış saatini ve fiyatını baskılarda göstermek için bir fikir vardı, o zaman bunun hata olduğu açıkça görülecektir.

Ancak çiftlerin sadece ilk pozisyon açıldığında ortaya çıkması, sonraki pozisyonların doğru bir şekilde açılması ve danışmanın saatlerce çalışarak onlarcasını üretmesi kafa karıştırıcı. Ve bar açma kontrol fonksiyonu her seferinde çalışır. Evet ve koşullara göre, danışman ilk pozisyonu hiç olmadığında açar ve sonrakileri sadece ilk pozisyonu açtıktan sonra fiyat yeterli bir mesafe kat ettiğinde açar.

 
Grigori.SB :

Danışman tarafından yazılmıştır. İlk başta yazdığı kişi, birbiri ardına iki pozisyon açar. Bu sorunu kendim yeniden oluşturamam. Lütfen yardım et.

OnTick() işlevi

Konumların açılmasından yalnızca CheckForOpen() işlevi sorumludur, işte burada:

Piyasadan bir pozisyon açmak için istek gönderen bir fonksiyon. Sunucu arızası durumunda gecikmeli bir tekrar eklendi. MetaQuotes MT5 demosunda test ederken, çok sık tekrar/teklif aldım.

Yeni bar açma kontrol fonksiyonu:

İkinci pozisyon, birinciden hemen sonra açılır, aynı saniyede biletler birer birer farklılık gösterir. Başlangıçta, danışmanın ikinci kopyasının ikinci çizelgede asılı olduğunu varsaydım, her şeyi kapatmamı, bir çizelge bırakmamı ve danışmanı başlatmamı istedi, ancak kelimelere ve müşterinin ekran görüntüsüne bakılırsa, bu değil. sebep. Sonraki pozisyonlar birer birer açılır, artık ikili yoktur. Çoğalamıyorum, zaten bu konuda kafamı kırdım. MT5 demo ICMarkets hedge'de müşteri olarak test ediliyor. Dubleksin ekran görüntüsü.


Tüm danışman.

Bu barda henüz bir pozisyon açılmadığını nasıl kontrol edersiniz?

 
Artyom Trishkin :

Bu barda henüz bir pozisyon açılmadığını nasıl kontrol edersiniz?

Hayır, böyle bir kontrol yok.

Bu tür kontroller var:

  • Yeni bir çubuk açılırsa, ilk tik ile bir pozisyon açılabilir,
  • Pozisyon yoksa ilk pozisyon açılabilir.
Onlar. burada, nedense, yeni bir çubuğun ilk tikinde aynı anda iki pozisyon açılır. Ve sadece ilk pozisyonlar. Ayrıca, böyle bir fenomen gözlenmez.
 
Grigori.SB :

Hayır, böyle bir kontrol yok.

Bu tür kontroller var:

  • Yeni bir bar açıldıysa, ilk tik ile bir pozisyon açılabilir,
  • Pozisyon yoksa ilk pozisyon açılabilir.
Onlar. burada, nedense, yeni bir çubuğun ilk tikinde aynı anda iki pozisyon açılır. Ve sadece ilk pozisyonlar. Ayrıca, böyle bir fenomen gözlenmez.

Orada ne olduğunu anlamak için zaman yok. Ancak yeni bir çubuktaki açık pozisyonların sayısını kontrol etmeye çalışın. Değilse, o zaman açın.