Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 836

 
Alexey Viktorov:

Va bene che si dica

niente, il thread è per MT4, quindi non ci fate caso

OK, datti da fare, è noioso qui

 

Saluti a tutti. Buona fortuna nella vita e profitto nel lavoro.

Sto chiedendo aiuto (inaspettatamente, eh? :) ).

In Mql sono uno zerobom, 2 giorni "nel soggetto". Se l'EA reale mi costringe a usare il trading automatico, sto cercando di scrivere (raccogliendo in tempo reale da diverse parti) il gufo per il mio EA piatto e naturalmente mi sto stancando :). Sto cercando di risolvere un altro problema da circa 10 ore e ancora non ci sono arrivato. Se qualcuno può aiutare con un consiglio o un esempio sarà estremamente grato (verbalmente e per iscritto, e soprattutto sotto la doccia).

In generale... C'è TC, usato con successo da me per molto tempo. Sulle condizioni di scambio sullo stesso strumento può ordini di mercato multidirezionali (non in sospeso). Alla posizione abbassata può essere riempito ad un segnale di trading, a condizione che la posizione è scesa di almeno X pips, a volte succede e fare un'aggiunta al riempimento (alle stesse condizioni (segnale di trading + dimensione del drawdown)). Il problema (attuale) è nell'apertura di posizioni aggiuntive, cioè... come controllare e restituire il valore della perdita su una posizione lunga. Seguendo l'esempiodi https://www.mql5.com/ru/forum/117061, ho modificato il codice per assegnare ad ogni posizione il proprio Magik, ma questo è tutto. Come selezionare esattamente una posizione che si è seduta e restituire il suo valore di perdita.... :(.

"il mio" codice per aprire le transazioni.

//-----------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)<1)

{

se (le mie condizioni di ingresso)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); altrimenti TP = 0;

if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); altrimenti SL = 0;

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "BUY",Magic,0,Blue);

if(ticket < 0) { Print("Error while opening BUY order #", GetLastError());}

}}

if(NumberOfPositions(Symbol(),OP_SELL, Magic)<1)

{

se (le mie condizioni di ingresso)

{

if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); altrimenti TP = 0;

if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); altrimenti SL = 0;

ticket=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),5,SL,TP, "SELL",Magic,0,Red);

if(ticket < 0) { Print("Error opening SELL order #", GetLastError());}

}}

//---------------

È prevista l'apertura di altri ordini con il seguente codice

//---------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)==1 && NumberOfPositions(Symbol(),OP_BUY, Magic_2)<1)

{

if (my entry conditions && GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic)>= LEVEL_1)

{

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "Extra Buy",Magic_2,0,Blue);

if(ticket < 0) { Print("Errore nell'apertura dell'ordine BUY #", GetLastError()); }

} }

//---------------

Ed è qui che mi sono bloccato :). Cosa usare al posto di GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic). Penso di dover usare Drawdown_level(Symbol(),OP_BUY,Magic) ma come ottenerlo...

Aiutate per favore, siate amici.
Z.U. Se si consiglia, si prega di tenere presente che io sono ancora nubyara che non troppo pigro per inviarmi un po' più dettagli, sai, come se: FOREST THERE, allora non dimenticate di specificare la direzione <------ || ------>.

Grazie per la vostra attenzione :).

код----доливаем по тренду
код----доливаем по тренду
  • 2009.05.07
  • www.mql5.com
Я пытался написать советник с открытием дополнительных лотов по тренду. Суть заключается вот в чем...
 
Igor Makanu:

Niente, il thread è per MT4, quindi non ci fate caso.

Ok, datti da fare, è noioso qui

Dimmi dov'è un ramo simile per MT5, lo chiederò lì...

 
Alexander Layzerevich:

Dimmi dov'è un thread simile per MT5, lo chiederò lì...

Chiedete qui. Qui per entrambe le lingue.
 
Alexey Viktorov:

Va bene specificare

La funzione evidenziata non è diversa dalla dichiarazione di funzione. Quindi, la funzione è dichiarata nei parametri di ingresso della funzione.

In MT4 la chiamata della funzione da Indicator va senza errori e funziona come necessario(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff);) Ho pensato che potrebbe essere lo stesso in MT5.

Per favore, consigliate come farlo correttamente?

 
Alexander Layzerevich:

In MT4 la chiamata della funzione da Indicator va senza errori e funziona come necessario(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff);) Ho pensato che potrebbe essere lo stesso in MT5.

Puoi dirmi come farlo correttamente?

È impossibile ottenere i dati di Envelopes in mql4
 
Artyom Trishkin:
Quindi è impossibile ottenere i dati di Envelopes in mql4

Ecco il codice di MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Tutto funziona perfettamente. Vorrei lo stesso in MT5

 
Alexander Layzerevich:

Ecco il codice di MT4

Tutto funziona perfettamente. Vorrei lo stesso in MT5

Beh, questo perché è un codice diverso e funzionerà.
 
Artyom Trishkin:
Beh, questo perché è un codice diverso e funzionerà.

Corretto il codice MT5 per inviare dati all'indicatore:

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIMEFRAMES    TimeFrames    = PERIOD_M5;             // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = MODE_SMMA;             // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE;           // Tип цены
//************************************************************************************************/
void OnTick()
{
double Signal_Buy = (int)Envelopes(Symbol(), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, 2,  Deviation(1)); // Сигнал на Покупку
}
//************************************************************************************************/
double Envelopes(string symb, ENUM_TIMEFRAMES tf, int period, int shift, int method, int price, int buff, double Deviation(int kanal))
{
  double buf[1];
  int handle=iEnvelopes(Symbol(), tf, period, shift, method, price, Deviation(kanal));
   if(handle<0)
   {
    Print("Failed to create handle ATR, Error: ",GetLastError());
    return(WRONG_VALUE);
   } else
   {
    if(CopyBuffer(handle,buff,0,1,buf)<0)
    {
     Print("Failed to copy data from the indicator ATR, Error: ",GetLastError());
     return(WRONG_VALUE);
    }
   }
   return(buf[0]);
}
//************************************************************************************************/

Ma l'errore è lo stesso.

 
Alexander Layzerevich:

Ecco il codice di MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Tutto funziona perfettamente. Vorrei lo stesso in MT5

Attenzione alle mani:

Nel mio post precedente questo è evidenziato nel tuo codice

double Deviation(int Time_Frames, int _Kanal)

e nel codice di questo, il messaggio citato è una dichiarazione di funzione. Anche evidenziato.

E questo

Deviation(TimeFrames, Kanal)

Chiamare una funzione utente che esiste. Anche se questo metodo di programmazione è inaccettabile per me, è comunque comprensibile. Ma come descrivere l'errore in quel codice, sono in perdita.

Motivazione: