Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 128

 
Anatoliy Ryzhakov :

Satış emri, Satış fiyatından kapatılır

Tam anlayamadım! Parmağınızı koddaki sövenin olduğu yere sokun !!! ( günlük SİPARİŞ KAPAT HATASI 4108 diyor) Şimdiden teşekkürler!

 

İyi günler Bilenler! Yılın en zor gününden bıktınız mı? iş yapabilir misin? ;=).

Bir danışman çizdim, her şey yolunda ama MQL, anladığım kadarıyla MT4 ortamında çalışıyor. Ve doğrudan borsa ile çalışan bir yazılımla çalışması için buna ihtiyacım var. Başka MQL derleyicileri var mı? Ve değilse, hangi dilde EA'yı yeniden yazmak daha iyidir.

 
STARIJ :

Mola verdin ve devam etmen gerekiyor

aram yok. Danışmanın emirlerini "görmemesinin" nedenleri nelerdir? Sunucum ve bilgisayarımın saati farklı, belki bu yüzden?

 
Anatoliy Ryzhakov : Ara vermiyorum. Danışmanın emirlerini "görmemesinin" nedenleri nelerdir? Sunucum ve bilgisayarımın saati farklı, belki bu yüzden?

Herkesin zamanı farklıdır. Acele etmeden uzaktan başlayın. 1. OrdersTotal işlevinin size ne verdiğini kontrol edin. Lütfen anlamının geçmiş ayarına bağlı olduğunu unutmayın: Bugün, son 3 gün, geçen hafta, ... İstediğiniz gibi ayarlayın. 2. Ardından bir döngü oluşturun ve Uyarıyı kullanarak tüm siparişlerin Sihirlerini görüntüleyin. vb. Buna hata ayıklama denir - bir programcının işinin çok önemli bir parçası. Kod yazmaktan daha önemli.

 
Lütfen, hacmin (lot) yanlışlıkla negatif bir değeri ayarlandığında Expert Advisor'daki FreeMarginCheck işlev hatası için geçersiz lot miktarını nasıl düzeltebileceğimi söyleyin. Test cihazında hata mesajı olmadan yanlış parti hakkında mesaj almak.

 
STARIJ :

Herkesin zamanı farklıdır. Acele etmeden uzaktan başlayın. 1. OrdersTotal işlevinin size ne verdiğini kontrol edin. Lütfen anlamının geçmiş ayarına bağlı olduğunu unutmayın: Bugün, son 3 gün, geçen hafta, ... İstediğiniz gibi ayarlayın. 2. Ardından bir döngü yapın ve Uyarıyı kullanarak tüm siparişlerin Sihirlerini görüntüleyin. vb. Buna hata ayıklama denir - bir programcının işinin çok önemli bir parçası. Kod yazmaktan daha önemli.

Teşekkür ederim !

 

Beyler lütfen söyleyin. danışman kodu nasıl yazılır, böylece koşul bir kez karşılandığında, danışman SL ayarlama yeteneği ile aynı anda 3 fırsat açar?

işte benim durumum

 if (MA_1>MA_2)
ticket= OrderSend ( _Symbol , OP_BUY ,Lots, Ask , 0 , Ask -SL* Point , Bid +TP* Point , NULL , 0 , 0 , clrGreen );
if (MA_1<MA_2)
ticket= OrderSend ( _Symbol , OP_SELL ,Lots, Bid , 0 , Bid +SL* Point , Ask -TP* Point , NULL , 0 , 0 , clrRed );

( OrdersTotal () ) işlevini kullanmam önerildi ancak bu benim durumuma uymuyor. ben böyle yazdım

 void OnTick ()
  {
//---
   double MA_1;
   MA_1= iMA ( _Symbol , 0 , 1 , 0 , 1 , 0 , 0 );
   double MA_2;
   MA_2= iMA ( _Symbol , 0 , 6 , 0 , 1 , 0 , 0 );
   int ticket= 0 ;
   if ( OrdersTotal ()<= 3 )
     {
       if (MA_1>MA_2)
         ticket= OrderSend ( _Symbol , OP_BUY ,Lots, Ask , 0 , Ask -SL* Point , Bid +TP* Point , NULL , 0 , 0 , clrGreen );
       if (MA_1<MA_2)
         ticket= OrderSend ( _Symbol , OP_SELL ,Lots, Bid , 0 , Bid +SL* Point , Ask -TP* Point , NULL , 0 , 0 , clrRed );
     }
//---
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }

Derlenmiş hiçbir hata yok, ancak bu işlev benim durumum için değil.

bu kodu buldum

 #property copyright "Влад Сергеев для mmgp" 
#property version    "1.00" 
#property strict 
#property script_show_inputs 

input int       orders = 4 ;       //всего ордеров в серии 
input bool      buy = true ;       //флаг разрешающий/запрещающий покупки 
input bool      sell = false ;     //флаг разрешающий/запрещающий продажи 
input int       magic = 100500 ;   //уникальный номер для ордеров, открываемых этим скриптом 
input double    lot = 0.01 ;       //объем каждого ордера серии 
input int       tp = 100 ;         //тейк профит, в пунктах 
input int       sl = 100 ;         //стоп лосс, в пунктах 
input int       slip = 2 ;         //допустимое проскальзывание на открытии, в пунктах (для ECN, где открытие по рынку - игнор) 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   int i= 0 ;  // для чего эта переменная
   int ticket= 0 ;
   if (buy) 
     {
       while (i<orders) // здесь эта переменная используется чтобы сравнивать ордера или для чего
        {
         RefreshRates (); // если убрать эту функцию коду хуже не становится
         ticket= OrderSend ( Symbol (), OP_BUY ,lot, NormalizeDouble ( Ask , Digits ),slip, 0 , 0 , "" ,magic, 0 , clrBlue ); //здесь понятно
         if (ticket!=- 1 ) // эта строчка тоже не понятна
           {
             if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))  // функция для выбора ордера это логично но тоже не понятно как ей пользоваться
              {
               OrderModify (ticket, OrderOpenPrice (), NormalizeDouble ( OrderOpenPrice ()-sl* Point , Digits ), NormalizeDouble ( OrderOpenPrice ()+tp* Point , Digits ), 0 , clrBlue );
               // эту строчку тоже хотел бы чтобы объяснили
              }
           }
         i++; // что увеличивается на оду единицу это относится к магическому номеру ордера чтобы программа понимала что у неё есть ордера
        }
     }
   i= 0 ;
   if (sell) // прошлая запись была для покупак эта для продаж 
     {
       while (i<orders) 
        {
         RefreshRates ();
         ticket= OrderSend ( Symbol (), OP_SELL ,lot, NormalizeDouble ( Bid , Digits ),slip, 0 , 0 , "" ,magic, 0 , clrRed );
         if (ticket!=- 1 ) 
           {
             if ( OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES ))  
              {
               OrderModify (ticket, OrderOpenPrice (), NormalizeDouble ( OrderOpenPrice ()+sl* Point , Digits ), NormalizeDouble ( OrderOpenPrice ()-tp* Point , Digits ), 0 , clrRed );
              }
           }
         i++;
        }
     }
  }  
//+------------------------------------------------------------------+

Belki sadece kullanılabilir, ben satırların anlamını anlamıyorum. Bu kodu benim durumumda yeniden yapılmışsa kullanabilir miyim?

 
Seric29 :

Beyler lütfen söyleyin. danışman kodu nasıl yazılır, böylece koşul bir kez karşılandığında, danışman SL ayarlama yeteneği ile aynı anda 3 fırsat açar?

işte benim durumum

( OrdersTotal () ) işlevini kullanmam önerildi ancak bu benim durumuma uymuyor. ben böyle yazdım

Derlenmiş hata yok, ancak bu işlev benim durumum için değil.

bu kodu buldum

Belki sadece kullanılabilir, ben satırların anlamını anlamıyorum. Bu kodu benim durumumda yeniden yapılmışsa kullanabilir miyim?

böyle dene

konum=0; //sipariş sayacı

for(int i=OrdersTotal()-1;i>=0;i--) // piyasa emirlerini sırala

{

eğer (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES))devam ederse;//piyasadan seç

{

eğer (OrderSymbol()!=Symbol()&&OrderMagicNumber()!=Magic) devam ederse;//sadece EA emirlerini seçin (Magic varsa ve herhangi bir döviz çiftinde işlem görüyorsa)

konum++; //seçilirse, konumu bir artır

}

}

  if (MA_1>MA_2&&pos<3)
  OrderSend ( _Symbol() , OP_BUY ,Lots, Ask , 0 , Ask -SL* Point ,Ask+TP* Point , NULL ,Magic, 0 , clrGreen );
  if (MA_1<MA_2&&pos<3)
  OrderSend ( _Symbol() , OP_SELL ,Lots, Bid , 0 , Bid +SL* Point ,Bid-TP* Point , NULL ,Magic, 0 , clrRed );

 
Çok ilginç bir forum. Bir sürü eğitici şey!
 
Seric29 :

Beyler lütfen söyleyin. danışman kodu nasıl yazılır, böylece koşul bir kez karşılandığında, danışman SL ayarlama yeteneği ile aynı anda 3 fırsat açar?

 if (MA_1>MA_2)
     for ( int i= 0 ; i< 3 ; i++)
          tiket = OrderSend ( _Symbol , OP_BUY ,Lots, Ask , 0 , Ask -(i== 0 ?SL_1:i== 1 ?SL_2:SL_3)* Point , Bid +TP* Point , NULL , 0 , 0 , clrGreen );
if (MA_1<MA_2)
     for ( int i= 0 ; i< 3 ; i++)
          tiket = OrderSend ( _Symbol , OP_SELL ,Lots, Bid , 0 , Bid +(i== 0 ?SL_1:i== 1 ?SL_2:SL_3)* Point , Ask -TP* Point , NULL , 0 , 0 , clrRed );