Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 662

 
Sergey Gritsay:
Purtroppo non c'è un analogo della proprietàMarketInfo(symbf,MODE_MARGINREQUIRED) in MQL5, ma è già stato discusso da qualche parte nel forum
OrderCalcMargin
OrderCalcMargin Calcola l'importo del margine richiesto per il tipo di ordine specificato nel conto corrente e nell'ambiente di mercato corrente, escludendo gli attuali ordini in sospeso e le posizioni aperte. Permette di stimare la quantità di margine per il commercio pianificato. Il valore viene restituito nella valuta del conto. bool OrderCalcMargin ( ENUM_ORDER_TYPE action, // tipo di ordine string symbol, // nome del simbolo double volume, // volume double price, // prezzo aperto double& margin // variabile per il valore del margine); Parametri action [in] Tipo di ordine, può accettare valori da ENUM_ORDER_TYPE. simbolo [in] Nome dello strumento finanziario. volume [in] Volume dell'operazione commerciale. prezzo [in] Prezzo di apertura. margin [out] Variabile, dove verrà scritta la quantità di margine necessaria in caso di esecuzione corretta di questa funzione. Il calcolo viene fatto come se non ci fossero ordini pendenti o posizioni aperte nel conto corrente. Il valore del margine dipende da molti fattori e può cambiare durante...
Documentazione | 2015.12.03 14:00
 
forexman77:

È necessario ottenere programmaticamentela quantità di fondi liberi necessari per aprire 1 lotto per comprare in MQL5, analogamente a MQL4 "MarketInfo(symbf,MODE_MARGINREQUIRED);"

Prova la funzione OrderCheck().
 
Alexey Kozitsyn:
Prova la funzione OrderCheck().
Grazie! L'ho capito.
double lot=1.0;
double margin_buy,margin_sell;
OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy);
OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell);
Print("margin_buy=",margin_buy);
Print("margin_sell=",margin_sell);
 
forexman77:
Grazie! L'ho capito.
double lot=1.0;
double margin_buy,margin_sell;
OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_ASK),margin_buy);
OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,lot,SymbolInfoDouble(_Symbol,SYMBOL_BID),margin_sell);
Print("margin_buy=",margin_buy);
Print("margin_sell=",margin_sell);
Sì, è possibile, ma nel caso di OrderCheck() è alimentato con la struttura della richiesta di scambio già pronta per essere inviata appena prima della richiesta stessa.
 

Voglio trasferire parte del codice in una funzione, ma il risultato della funzione non è restituire un valore, ma cambiare effettivamente i valori delle variabili, come faccio?

 int CountExpOrder_OS=0;

 int CountExpOrder_OB=0;

 int CountMarketOrder_OS=0;

 int CountMarketOrder_OB=0;

 

OpenOrdersInfo();

void OpenOrdersInfo()

  {

   CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));

   CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));

   CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));

   CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));


   Print("Отложенных ордеров на покупку открыто(Magic: ",Magic,")=",CountExpOrder_OB);

   Print("Отложенных ордеров на продажу открыто(Magic: ",Magic,")=",CountExpOrder_OS);

   Print("Рыночных ордеров на покупку открыто(Magic: ",Magic,")=",CountMarketOrder_OB);

   Print("Рыночных ордеров на продажу открыто(Magic: ",Magic,")=",CountMarketOrder_OS);

  } 

 
-Aleks-:

Voglio trasferire parte del codice in una funzione, ma il risultato della funzione non è il ritorno di un valore, ma il cambiamento effettivo dei valori delle variabili, come faccio?

non sarà d'aiuto?

int OpenOrdersInfo()

{

...

ritorno(0);

}

 
-Aleks-:

Questa domanda, voglio trasferire parte del codice in una funzione, ma il risultato della funzione non è il ritorno di un valore, ma cambiare effettivamente i valori delle variabili, come faccio?

 int CountExpOrder_OS=0;

 int CountExpOrder_OB=0;

 int CountMarketOrder_OS=0;

 int CountMarketOrder_OB=0;

 

OpenOrdersInfo();

void OpenOrdersInfo()

  {

   CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));

   CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));

   CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));

   CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));


   Print("Отложенных ордеров на покупку открыто(Magic: ",Magic,")=",CountExpOrder_OB);

   Print("Отложенных ордеров на продажу открыто(Magic: ",Magic,")=",CountExpOrder_OS);

   Print("Рыночных ордеров на покупку открыто(Magic: ",Magic,")=",CountMarketOrder_OB);

   Print("Рыночных ордеров на продажу открыто(Magic: ",Magic,")=",CountMarketOrder_OS);

  } 

Qui va bene, il VOID non restituisce un risultato.

 
-Aleks-:

Voglio trasferire parte del codice in una funzione, ma il risultato della funzione non sarebbe restituire un valore, ma cambiare effettivamente i valori delle variabili, come faccio?

Potrei provarci, ma non è una buona soluzione:

int CountExpOrder_OS=0,CountExpOrder_OB=0,CountMarketOrder_OS=0,CountMarketOrder_OB=0;

OpenOrdersInfo(CountExpOrder_OS,CountExpOrder_OB,CountMarketOrder_OS,CountMarketOrder_OB);
  Print("Ордеров на покупку(Magic: ",Magic,")=",CountExpOrder_OB);
  Print("Ордеров на продажу(Magic: ",Magic,")=",CountExpOrder_OS);
  Print("Позиций на покупку(Magic: ",Magic,")=",CountMarketOrder_OB);
  Print("Позиций на продажу(Magic: ",Magic,")=",CountMarketOrder_OS);


void OpenOrdersInfo(int &CountExpOrder_OS,int &CountExpOrder_OB,int &CountMarketOrder_OS,int &CountMarketOrder_OB)
 {
  CountExpOrder_OS=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,SELL,ALL,"Number"));
  CountExpOrder_OB=StrToInteger(Order.Exp_Order_Info(Symbol(),Magic,BUY,ALL,"Number"));
  CountMarketOrder_OS=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_SELL, ALL, "Number"));
  CountMarketOrder_OB=StrToInteger(Order.Market_Order_Info(Symbol(), Magic, OP_BUY, ALL, "Number"));
 }
 
Vladislav Andruschenko:

Va bene, il VOID non restituisce un risultato.

Sì, funziona correttamente - è solo che c'era un bug da parte mia e sono caduto nel torpore.

Grazie a tutti per il vostro aiuto.

Ora farò domande su cinque :)

 
-Aleks-:

Sì, è vero - è stato solo un errore da parte mia e sono caduto nel torpore.

Grazie a tutti per il vostro aiuto.

Ora farò domande per cinque dollari:)

5 sterline per una risposta?

)

In attesa...

Motivazione: