Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 65

 

Ecco l'esperto in persona - ha ripulito le cose inutili - c'era molto bashing :)

File:
 

Come si chiude un ordine?

L'ho aperto così:

mrequest.action = TRADE_ACTION_DEAL; // esecuzione immediata

mrequest.price = NormalizeDouble(Ask,_Digits); // ultimo prezzo Ask

mrequest.sl = NormalizeDouble(Ask - 10000*_Point,_Digits); // Stop Loss

mrequest.tp = 0; // prendere profitto

mrequest.symbol = _Symbol; // simbolo

mrequest.volume = Lotti; // numero di lotti da scambiare

mrequest.magic = 1; // Numero magico

mrequest.type = ORDER_TYPE_BUY; // ordine di acquisto

mrequest.type_filling = ORDER_FILLING_FOK; // tipo di ordine - tutto o niente

mrequest.deviazione=100; // slittamento dal prezzo corrente

OrderSend(mrequest,mresult);

Il problema è che abbiamo più di un ordine aperto, e abbiamo bisogno di chiudere un ordine selettivo...

 
Forex_Noob: Come chiudere un ordine?

La questione è che non c'è un solo ordine aperto, ma diversi, e dobbiamo chiudere selettivamente...

1. Inserire il codice correttamente.

2. Se diversi ordini sono aperti in una direzione, il risultato è una posizione aggregata.

3. Per chiudere una posizione aperta si devono piazzare ordini diretti in senso opposto, il cui volume complessivo è uguale al volume della posizione da chiudere.

4. Se è necessario chiudere solo una parte di una posizione, allora è necessario esporre ordini opposti con volume aggregato corrispondente.

 
Yedelkin:

1. Inserire il codice correttamente.

2. Se diversi ordini sono aperti nella stessa direzione, il risultato è una posizione aggregata.

3. Per chiudere una posizione aperta si devono piazzare ordini diretti in senso opposto, il cui volume complessivo è uguale al volume della posizione da chiudere.

4. Se solo una parte di una posizione deve essere chiusa, allora gli ordini opposti devono essere piazzati con il volume aggregato corrispondente.

Ok, grazie. L'unico problema ora è che le posizioni non sono sempre chiuse con un ordine di chiusura...
 
Forex_Noob:
Ok. Grazie. Solo che ora c'è un altro problema: l'ordine di chiusura non sempre chiude le posizioni...
Guarda nel registro - i risultati sono registrati lì.
 

Yedelkin,Reshetov,

Salve,

Qual è il metodo più semplice per estrarre i dati da un indicatore per diverse coppie?

string Currency1 = "GBPUSD";
string Currency2 = "EURUSD";
string Currency3 = "USDCHF";
string Currency4 = "USDJPY";
int ATRHandle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  for(int c=0;c<4;c++){
  SymbolSelect(Currency1,true);
  SymbolSelect(Currency2,true);
  SymbolSelect(Currency3,true);
  SymbolSelect(Currency4,true);
  }
  ATRHandle = iATR(Symbol(),PERIOD_M1,1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(ATRHandle);
   Comment("");        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//Например так,как показал
  }
//+------------------------------------------------------------------+
Grazie in anticipo.
 
mario065: Qual è il metodo più semplice per ottenere dati da un indicatore per diverse coppie?

È questo che intende?

ATRHandle1 = iATR(Currency1,PERIOD_M1,1);
ATRHandle2 = iATR(Currency2,PERIOD_M1,1);
ATRHandle3 = iATR(Currency3,PERIOD_M1,1);
ATRHandle4 = iATR(Currency4,PERIOD_M1,1);
 
Yedelkin:

Intendi questo?

Ciao,

Certo che no.

Se c'è più di un tacchino, bisogna farlo cento volte per ognuno, come molte coppie mangiano.

Un gestore per utilizzare tutte le coppie.

 
mario065: Se ci sono diversi indicatori, per ognuno di loro è necessario fare tante volte quanto il numero di coppie mangiate. Un gestore per utilizzare tutte le coppie.

Quindi vuoi avere una sola maniglia, ma l'indicatore iATR funziona con caratteri diversi?

Dalla descrizione dell'indicatore iATR, si può vedere che è progettato per lavorare con un solo simbolo. Pertanto, per lavorare con 4 caratteri, è necessario eseguire 4 copie dell'indicatore iATR . A sua volta, la maniglia dell'indicatore è necessaria per accedere ai valori della copia dell'indicatore specifico, e se state eseguendo 4 copie dell'indicatore, dovrete memorizzare le maniglie appropriate da qualche parte.

Se la questione dell'utilizzo di una sola maniglia è principale, dovremo riscrivere l'indicatoreiATR in modoche lavori con più simboli contemporaneamente, abbia il numero corrispondente di array di valori, ecc.Allora sarà possibile usare una maniglia

handle = myATR(Currency1,Currency2,Currency3,Currency4,PERIOD_M1,1);

e usarlo per indirizzare questo o quel buffer di indicatori da myATR.

 

Puoi anche scriverlo così (schematicamente):

string Currency[4] = {"GBPUSD","EURUSD","USDCHF","USDJPY"}; //могу ошибиться в части правильности записи присвоения значений, но проверить легко по Справочнику
int ATRHandle[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int c=0;c<4;c++) SymbolSelect(Currency[с],true);
   for(int c=0;c<4;c++) ATRHandle[с] = iATR(Currency[с],PERIOD_M1,1);
   return(0);
  }