Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 73

 

Dove è scritta la modifica della posizione?

Dettagli di Stop Loss e Take Profit scritti prima delle condizioni di Acquisto e Vendita

   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:

C'è un errore nel codice:

Grazie. Non c'è più.

E il posizionamento?

Il fatto è che se metto le parentesi graffe in alcuni punti, alla compilazione genera - 'PositionModify' - la funzione può essere dichiarata solo nell'ambito globale

e questa volta ci credo, cioè il 'modificatore di posizione' stesso dovrebbe essere messo prima di int OnInit() e le condizioni (if) dopo la sezione di acquisto ?

 
papaklass:

Dammi il codice, non capisco cosa intendi.

PS: dovresti descrivere la funzione PositionModify() a livello globale, cioè al livello in cui si trovano le funzioni: OnInit(), OnTick(), OnDeinit().

Ecco il codice. Ha solo uno stop per comprare, come ha uno stop per vendere allo stesso modo.
File:
Aim.mq5  13 kb
 
papaklass:

Corretto. Si compila senza errori. Non l'ho provato nel tester. Il tuo codice non era leggibile. Abituatevi al layout del codice come nella mia versione corretta.

Grazie (anche se non capisco bene cosa sia cambiato oltre al layout).

Cosa significa "SMB" nella linea 2 e dove è definito dai valori? non si può scrivere _Symbol?

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

Ciao, puoi dirmi se gli ordini sui segnali saranno eseguiti se ho il mio computer terminale spento?

 

Buon pomeriggio,

Potete consigliarmi come implementare al meglio quanto segue: l'esperto si lancia, quando viene inizializzato disegna (nell'area del grafico? da qualche altra parte?), diciamo, TextBox e Button. L'esperto gestisce i tick. Se un utente inserisce qualche valore in TextBox e premere Button, il gestore del tick vede questi nuovi dati.

In altre parole - qual è il modo corretto (più semplice, migliore) di organizzare lo scambio interattivo dei dati dell'utente con l'Expert Advisor tramite elementi della GUI di Windows? CChartObjectEdit e CChartObjectButton è, scusatemi, una specie di "pornografia".


Grazie. Scusa se la domanda è semplice e per favore cerca dove si trova la risposta!

 
papaklass:

Fico.

1. il codice ora compila. Primo cambiamento.

Peccato che la compilazione e l'operabilità non siano la stessa cosa)

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
 

Perché nel tester il codice imposta stoploss e profitti ma non sul grafico?

Sto cominciando a impazzire man mano che vado avanti)))

 
Lester:

Perché nel tester il codice imposta stoploss e profitti ma non sul grafico?

Sto cominciando ad arrabbiarmi))).

Lester:Zdes mettere un modello, dentro c'è una modifica, e ha mostrato come polzuvatsya.

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

Se non volete farlo, dovrete leggere correttamente le variabili.

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

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

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

 
Chino:

Ciao, puoi dirmi se gli ordini sui segnali saranno eseguiti se ho il mio computer terminale spento?

Gli sviluppatori hanno promesso una tale possibilità. Non ancora.