Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 98

 

Boris.45:

Yedelkin : Cosa restituisce Time_H1[1][0]?

Non uso questo elemento dell'array, perché procedo immediatamente all'algoritmo di ricerca dei frattali delle ultime 5 barre. Mentre Time_H1[1][0] è il tempo di apertura della barra zero dove i parametri di questa barra non si sono ancora formati.Forse mi sbaglio, ma dalla mia esperienza personale, ho visto che usare i parametri di una barra zero per formare serie temporali porta alla loro distorsione

Ok, lasciatemi chiarire la domanda:

Se "Time_H1[nomer_instr][i]=Time_buf[i];" e "Time_H1[1][1]=2011.01.03 11:00:00", cosa restituisce Time_buf[0]?

 

Per favore, mandami un link per chiudere una certa posizione (specifica).


Cioè, ad un certo punto, quando le condizioni per chiudere una posizione sono soddisfatte, diciamo BUY, l'Expert Advisor (al momento) chiude qualsiasi posizione BUY aperta. Ora mi trovo di fronte a un problema, quando ho bisogno di chiudere una certa (specifica) posizione BUY.

Per esempio, quando una posizione BUY viene aperta, puoi darle una designazione specifica, ma quando viene chiusa, devi specificare 'BUY' come condizione.
 
Lester: Per favore inviatemi un link per chiudere una certa posizione (specifica), cioè ad un certo punto, quando le condizioni per chiudere una posizione sono soddisfatte, diciamo BUY, l'advisor (al momento) chiude qualsiasi posizione BUY aperta. Ora mi trovo di fronte a un problema, quando ho bisogno di chiudere una certa (specifica) posizione BUY.

Per esempio, quando aprite una posizione BUY, potete darle una designazione specifica, ma quando la chiudete, dovete specificare la sua "esistenza".
E come si chiude "qualsiasi posizione aperta"? Essenzialmente, ogni posizione aperta corrisponde a un singolo simbolo. Così, quando si chiude, si deve usare il nome di quel simbolo, invece di assegnare un "simbolo specifico" alla posizione aperta.
 
Ecco un esempio. Il primo Buy Buy in the flat, il secondo Buy per chiudere il Sell in the flat e Buy in the trend. La chiusura del Buy avviene anche per tutte le BAY aperte - il che non è buono, perché la seconda chiusura si riferisce solo alla tendenza.
if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3 && Buy_Condition_10)
        {
         // есть ли в данный момент открытая позиция на покупку?
         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);         
                 
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
         }
      }
 if(Buy_Condition_4 || Buy_Condition_5)
     { 
       if(Buy_Condition_6)
        {
         // есть ли в данный момент открытая позиция на покупку?
  if(Buy_opened)
      {
      Alert("Позиция на покупку во Флэте есть");
      return;    // не добавлять к открытой позиции на покупку
      }   
    if(PositionSelect(_Symbol)==true) // есть открытая позиция
      {
       if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
       {
        Alert("Закрываю ордер Sell флэт!!!");                  
                                  
         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);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
          Alert("тикет закрытия Sell флэт #:",mresult.order,"!!");
           }
         else
           {
          Alert("Запрос на установку ордера закрытия Sell флэт не выполнен - код ошибки:",GetLastError());
          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);         
                 
         // анализируем код возврата торгового сервера
         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;
           }
        }
      }
    }
  }

if(Buy_Close_4 || Buy_Close_5)
        {
         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;
           }
        }
      }
    }
 
Lester: Ecco un esempio. Il primo Buy Buy in the flat, il secondo Buy per chiudere il Sell in the flat e Buy in the trend. Tuttavia, questo non è buono, perché la seconda chiusura è solo legata alla tendenza.
Quindi avete intenzione di chiudere diverse "posizioni" su un simbolo?
 
Yedelkin:
Quindi avete intenzione di chiudere diverse "posizioni" sullo stesso simbolo?

Non proprio.

Se un buy-flat è aperto, non posso chiudere un buy-trend. E viceversa.

Cioè, per chiudere certe posizioni sullo stesso simbolo - o un flat (se un flat è aperto) o un trend (se un trend è aperto).

 
Lester: Non esattamente. Se un buy-flat è aperto, allora non posso chiudere un buy-trend. E viceversa.

Cioè, per chiudere certe posizioni su un singolo simbolo - sia un flat (soggetto a flat di apertura) o un trend (soggetto a trend di apertura).

Capisco. Purtroppo sono stato fuorviato a causa di imprecisioni terminologiche e non posso aiutarla ulteriormente. In MQL5 può esistere solo una posizione su ogni simbolo. Le due posizioni di tipo"buy-flat e buy-trend" non possono esistere su un simbolo alla volta. In effetti, la tua domanda non riguarda mql5-positions, ma il tracciamento degli ordini di trading che hai piazzato. Se cerchi nei forum, tre anni fa c'era un articolo sugli "ordini virtuali" per MT5. E in seguito un tale argomento è stato sollevato molte volte sul forum.
 
Yedelkin:

Ok, chiarisco la domanda:

Se "Time_H1[nomer_instr][i]=Time_buf[i];" e "Time_H1[1][1]=2011.01.03 11:00:00", cosa restituisce Time_buf[0]?

Cercherò di spiegare l'idea che sto cercando di implementare nell'EA.

Ci sono funzioni standard CopyTime(), CopyOpen(), CopyHigh(), ecc., che usano i corrispondenti array Time_buf[], Open_buf[], High_buf[], ecc.

Usando queste funzioni, possiamo ottenere i dati storici per diversi timeframe e diverse valute. In questo caso, Time_buf[0]è il tempo di apertura della barra zero,

High_buf[0] è il valore massimo del prezzo della valuta specificata sulla barra zero al momento dell'ultimo tick in arrivo.

Poi creo degli array bidimensionali per ogni timeframe per ogni parametro Time, Open, ecc. Poi ho i seguenti array per il timeframe H1

Time_H1[i][j], Open_H1[i][j], High_H1[i][j], ecc. In questi array ogni riga è dedicata ai dati storici di una certa valuta. Così,

usando il ciclo per numero di valuta for( i=1; i<=nomer_instr; i++ ) sovrascrivo i dati storici Time_buf[j], High_buf[j] ecc. con le righe corrispondenti degli array

Tempo_H1[i][j], Alto_H1[i][j] ecc.

Se fai trading usando i tick, puoi usare i parametri correnti dalla barra zero. Naturalmente, i parametri attuali della barra zero al momento di

Ho un Expert Advisor che usa le barre invece dei tick. Ho visto che quando l'EA sta operando su barre

i valori High_buf[0] e Low_buf[0] non sono valori storici al momento della chiusura della barra zero, sono dei valori casuali. Quindi se includiamo

parametri della barra zero in una sequenza storica, l'intera sequenza storica del parametro sarà distorta. Ecco perché non uso i parametri della barra zero.

Scusa se è così lungo.


 

Boris.45:

Yedelkin : Ok, lasciami chiarire la mia domanda: se "Time_H1[nomer_instr][i]=Time_buf[i];" e "Time_H1[1][1]=2011.01.03 11:00:00", cosa restituisce Time_buf[0]?

Cercherò di spiegare l'idea che sto cercando di implementare nel mio Expert Advisor.

Non stavo chiedendo dell'idea :)

Boris.45: Time_buf[0]- è il tempo di apertura della barra zero,

È quello che sto chiedendo, quale valore restituisce l'elemento dell'array di cui parli?

 

Per favore, consigliatemi!

Come cambiare il colore di sfondo delle coppie di valute nella panoramica del mercato

O rimuovere del tutto il colore!

Grazie in anticipo!

Motivazione: