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

 

Pozisyon değişikliği nerede yazılır?

Zarar durdur ve kar al verileri, alım satım şartlarından önce yazılmıştır.

   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );             // лучшее предложение на покупку
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );             // лучшее предложение на продажу
   double SL  = NormalizeDouble (StopLoss, _Digits );
   double TP  = NormalizeDouble (TakeProfit, _Digits );
                        
   bool Buy_Condition_1=...;
   bool Buy_Condition_2=...;
   bool Buy_Condition_3=...;
а сам
 bool PositionModify( const string _Symbol , const double SL, const double TP)
   {
       if ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
     {
       if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
         {
     Alert ( "SL!!!" );
     return ;     // закрыл 
         }
   MqlTradeRequest request={ 0 };
   MqlTradeResult   result ={ 0 };
        
       
   mrequest.action= TRADE_ACTION_SLTP ;
   mrequest.symbol= _Symbol ;
   mrequest.magic =EA_Magic; 
   mrequest.sl    =StopLoss;
   mrequest.tp    =TakeProfit;
   OrderSend (mrequest,mresult);
   if (mresult.retcode== 10009 || mresult.retcode== 10008 ) //запрос выполнен или ордер успешно помещен
           {
             Alert ( "Стопка прошла#:" ,mresult.order, "!!" );
           }
         else
           {
             Alert ( "Стопка не прошла - код ошибки:" , GetLastError ());
             return ( false );
           }
   return ( true );
  }
//----------------------------------------------------------------- 
if (Buy_Close_1 || Buy_Close_2)
  
после отсылки ордера на покупку. Пока при компиляции борюсь с "лишними" скобками фигурными. Вопрос дубль 2 - правильно ли я расположил модификацию позиции? И вообще, "классический" ли он имеет код (при условии, что он верный)?
 
papaklass :

Kodda bir hata var:

Sayesinde. Kaldırıldı.

Konum ne olacak?

Böyle bir şey, kaşlı ayraçları yerine koyarsam, derleme sırasında şunu verir - 'PositionModify' - işlevi yalnızca global kapsamda bildirilebilir

ve bu sefer ona inanıyorum, yani "konum değiştirici"nin kendisi int OnInit()'ten önce olmalı ve koşullar (eğer) satın alma bölümünden sonra?

 
papaklass :

Kodu ver, ne demek istediğini anlamadım.

Not: PositionModify() işlevini global düzeyde tanımlamalısınız, yani. fonksiyonların bulunduğu seviyede : OnInit() , OnTick(), OnDeinit().

İşte kod. Sadece satın almak için bir durağı vardır, çünkü satmak için benzerdir.
Dosyalar:
Aim.mq5  13 kb
 
papaklass :

Düzeltildi. Hatasız derler. Test cihazındaki işi kontrol etmedim. Kodunuz okunamadı. Kodu, düzeltilmiş versiyonumdaki gibi biçimlendirmeye alışın.

Teşekkürler (konum dışında nelerin değiştiğini tam olarak anlamadım).

2. satırda "SMB" ne anlama geliyor ve değerlerle nerede tanımlanıyor? _Symbol yazmak mümkün değil mi?

  mrequest.action   = TRADE_ACTION_SLTP ;
      mrequest.symbol   = smb;
      mrequest.magic    = EA_Magic; 
      mrequest.sl       = SL;
      mrequest.tp       = TP;
 

Merhaba, terminalli bilgisayarım kapalıysa, emirlerin sinyallerle ( bir sinyale abone olurken) yürütülüp yürütülmeyeceğini söyle?

 

Tünaydın,

Lütfen bana aşağıdakileri nasıl uygulayacağımı söyleyin: Expert Advisor başlatılır, başlatma sırasında çizer (grafik alanında mı? başka bir yerde mi?), Diyelim ki bir Metin Kutusu ve bir Düğme. Uzman Danışman keneleri yönetir. kullanıcı girerse TextBox'ta bir değer ve Düğmeye basarsanız, onay işleyicisi bu yeni verileri görür.

Başka bir deyişle, Windows GUI öğeleri aracılığıyla bir uzmanla etkileşimli bir kullanıcı verisi alışverişi düzenlemenin en iyi (en kolay, en iyi) yolu nedir? CChartObjectEdit ve CChartObjectButton, üzgünüm, bir tür "pornografi".


Teşekkür ederim. Soru basit ve dürtme ise özür dilerim, lütfen cevap nerede!

 
papaklass :

Harika.

1. Kod şimdi derleniyor. İlk değişiklik .

Derleme ve performansın aynı olmaması üzücü)

input int StopLoss= 60 ;       // Stop Loss
input int TakeProfit= 200 ;   // Take Profit
//--- глобальные переменные
double MFI[]; // массив MFI
double DEMA[]; // массив DEMA

 bool PositionModify( const string smb, const double SL, const double TP)
  {       
       MqlTradeRequest mrequest={ 0 };
       MqlTradeResult   mresult ={ 0 };
      
      mrequest.action   = TRADE_ACTION_SLTP ;
      mrequest.symbol   = smb;
      mrequest.sl       = SL;
      mrequest.tp       = TP;
      
       OrderSend ( mrequest, mresult );
       if ( mresult.retcode == 10009 || mresult.retcode == 10008 ) //запрос выполнен или ордер успешно помещен
      {          
         Alert ( "Стопка прошла#:" , mresult.order, "!!" );
      }
       else
      {
         Alert ( "Стопка не прошла - код ошибки:" , GetLastError () );
         return ( false );
      }   
   return ( true );
  }
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
  {
MFIHandle= iMFI ( NULL , 0 ,MFIPeriod,VolumeType);
DEMAHandle= iDEMA ( NULL , 0 ,PeriodDEMA,ShiftDEMA,MFIHandle);
if (BolBandsHandle< 0 || MFIHandle< 0 || DEMAHandle< 0 )
     {
       Alert ( "Ошибка при создании индикаторов - номер ошибки: " , GetLastError (), "!!" );
       return (- 1 );
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
 //+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
 ...
   double Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );             // лучшее предложение на покупку
   double Bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );             // лучшее предложение на продажу
   double SL   = NormalizeDouble ( PositionGetDouble ( POSITION_SL ), 4 );
   double TP   = NormalizeDouble ( PositionGetDouble ( POSITION_TP ), 4 );
                        
   bool Buy_Condition_1
   
   bool Buy_Close_1=
   bool Sell_Condition_1=
   
   bool Sell_Close_1=
   
 if (Buy_Condition_1 || Buy_Condition_2)
     { 
       if (Buy_Condition_3 && Buy_Condition_4)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if (Buy_opened)
           {
             Alert ( "Позиция на покупку имеется" );
             return ;     // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL ;     // немедленное исполнение
         mrequest.symbol = _Symbol ;               // символ
         mrequest.magic = EA_Magic;               // Magic Number
         mrequest.volume = Lot;                   // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY ;         // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK ;   // тип исполнения ордера - все или ничего

         //--- отсылаем ордер
         OrderSend (mrequest,mresult);
         
         
         
 //------------------------------------------------------------------------------
         PositionModify( Symbol (), NormalizeDouble (Bid - SL* _Point , 4 ),TP* _Point );
 //-------------------------------------------------------------------------------
 
 
 
 
         // анализируем код возврата торгового сервера
         if (mresult.retcode== 10009 || mresult.retcode== 10008 ) //запрос выполнен или ордер успешно помещен
           {
             Alert ( "Buy успешно помещен, тикет ордера #:" ,mresult.order, "!!" );
           }
         else
           {
             Alert ( "Запрос на установку ордера Buy не выполнен - код ошибки:" , GetLastError ());
             return ;
           }
        }
      } 

if (Buy_Close_1 || Buy_Close_2)
     {
       if (Buy_Close_3)
        {
         // есть ли в данный момент открытая позиция на покупку?
           if ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
           {
             if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
                {
           Alert ( "Закрываю ордер BUY!!!" );                  
                                  
         mrequest.action = TRADE_ACTION_DEAL ; // немедленное исполнение
         mrequest.symbol = _Symbol ;           // символ
         mrequest.magic = EA_Magic;           // Magic Number
         mrequest.volume = Lot;               // количество лотов для торговли
         mrequest.type = ORDER_TYPE_SELL ; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK ; // тип исполнения ордера - все или ничего
         //--- отсылаем ордер
         OrderSend (mrequest,mresult);
         // анализируем код возврата торгового сервера
         if (mresult.retcode== 10009 || mresult.retcode== 10008 ) //запрос выполнен или ордер успешно помещен
           {
             Alert ( "тикет закрытия Buy #:" ,mresult.order, "!!" );
           }
         else
           {
             Alert ( "Запрос на установку ордера закрытия Buy не выполнен - код ошибки:" , GetLastError ());
             return ;
           }
        }
      }
    }
  }
 ...
     return ; 
} //+------------------------------------------------------------------+end PositionModify
 

Bu yüzden kod, test cihazında stop-loss ve karları ayarlar, ancak grafiğin kendisinde değil mi?!

çıldırmaya başlıyorum :)

 
Lester :

Bu yüzden kod, test cihazında stop-loss ve karları ayarlar, ancak grafiğin kendisinde değil mi?!

çıldırmaya başlıyorum :)

Lester : Buraya bir şablon koydum, yemek yedim ve içeride değişiklik yaptım, nasıl emekleneceğini gösterdim.

https://www.mql5.com/ru/forum/6343/page73

İstemiyorsanız, değişkeni doğru bir şekilde düşünmeniz gerekir.

Стоплос и тейкпрофит в пункти.*Понт = 0.002 -ето тейк,ну надо и к добавит.

PositionModify( Symbol (), NormalizeDouble (Bid - SL* _Point , 4 ),TP* _Point );

PositionModify( Symbol (), NormalizeDouble ((Bid - SL* _Point ), 4 ), NormalizeDouble ((Bid + TP* _Point ), 4 ));

 
Chino :

Merhaba, terminalli bilgisayarım kapalıysa, emirlerin sinyallerle (bir sinyale abone olurken) yürütülüp yürütülmeyeceğini söyle?

Geliştiriciler böyle bir fırsat vaat etti. Henüz değil.