Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 42

 

Buon pomeriggio, non riesco a capire come fare una cosa semplice in MQL5. Ho bisogno di dichiarare una variabile a livello di classe (tipo array tridimensionale doppio) e poi fare la sua inizializzazione tardiva nel costruttore. In C# sarebbe così:

public class MyClass
{
   
  private double[,,] myArray;
   
  public MyClass(int dimension1, int dimension2, int dimension3)

{
   myArray = new double[dimension1, dimension2, dimension3];

}

Come ottenere lo stesso risultato in MQL5? Posso dichiarare un array dinamico tridimensionale. Ma con la funzione ArrayResize posso allocare la memoria solo per la prima dimensione, e le altre due?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Buona giornata! Cari utenti del forum, qualcuno può per favore consigliare qui
int OnInit()
  {
//---
  Print ( ACCOUNT_BALANCE );
   Print (SYMBOL_MARGIN_INITIAL);//Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте для открытия позиции объемом в один лот. Используется при проверке средств клиента при входе в рынок.
  
   printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE));
   printf("ACCOUNT_CREDIT =  %G",AccountInfoDouble(ACCOUNT_CREDIT));
   printf("ACCOUNT_PROFIT =  %G",AccountInfoDouble(ACCOUNT_PROFIT));
   printf("ACCOUNT_EQUITY =  %G",AccountInfoDouble(ACCOUNT_EQUITY));
   printf("ACCOUNT_MARGIN =  %G",AccountInfoDouble(ACCOUNT_MARGIN));
   printf("ACCOUNT_FREEMARGIN =  %G",AccountInfoDouble(ACCOUNT_FREEMARGIN));
   printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));
   printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));
   printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
  
   MqlTradeRequest request={0};
      MqlTradeResult result={0};
      
 
  {
    request.    action=TRADE_ACTION_DEAL;           // Тип выполняемого действия
  
    request.                        volume=1;           // Запрашиваемый объем сделки в лотах     
    request.               type=ORDER_TYPE_SELL;             // Тип ордера
    
   }
   
  OrderSend(request,result); 
  
  
  int Error=GetLastError(); ResetLastError();
        printf("Error %i ",Error);
      
        
        
       
  
  
  
  
  
  
  
  
//---
   return(0);
  }
//+------------------------------------------------------------------+

ERR_TRADE_SEND_FAILED
4756
Fallito l'invio della richiesta di scambio

Perché non ha funzionato? Forse i professionisti possono dirmi rapidamente dove cercare, altrimenti tirerò a indovinare fino a stasera...

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
Dimka-novitsek:
Buona giornata! Cari utenti del forum, qualcuno può darvi qualche consiglio?

ERR_TRADE_SEND_FAILED
4756
Fallito l'invio di una richiesta di scambio

Perché non ha funzionato? Forse i professionisti ti diranno rapidamente dove cercare, altrimenti tirerò a indovinare fino a sera...

Non dovete indovinare, dovete guardare le informazioni nella richiesta MqlTradeRequest, l'avete creata per un motivo.

Beh, per cominciare non avete specificato il prezzo al quale pensate di vendere

 
Dimka-novitsek: Vorrei sapere dove cercare velocemente, altrimenti tirerò a indovinare fino a stasera...
Per prima cosa, bisogna vedere quanti campi obbligatori devono essere compilati per la variabile di richiesta per questo tipo di azione.
 
Grazie!!! In qualche modo ho pensato che con l'esecuzione istantanea il prezzo fosse comprensibile....
 
Buona giornata! Non capisco bene come usare la funzione
 for (int i=0;i<10;i=i+0.1){ Print( "i ",i);  
 bool  OrderCalcMargin(
         action=ORDER_TYPE_SELL,           // тип ордера
                  symbol=_Symbol,           // имя символа
                  volume=i,           // объем
                  price=last_tick.bid,            // цена открытия
   double&               margin            // переменная для получения значения маржи
   ); 
   Print( " margin  ", margin );  }
  

OrderCalcMargin' - la funzione può essere dichiarata solo nell'ambito globale deposit.mq5 86 Qualcosa non va, insomma.

In generale, voglio creare una funzione che usi una percentuale del deposito. Per esempio, il 50% è un accordo sulla metà del mio deposito. Voglio capire quanto costa 1 lotto? Può essere calcolato programmaticamente? Ho pensato e letto per il terzo giorno. E i lotti possono essere diversi ovunque - dipende dal tipo di transazione e dal conto!

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Dimka-novitsek:
Buona giornata! Non capisco bene come usare la funzione

OrderCalcMargin' - la funzione può essere dichiarata solo nell'ambito globale di deposit.mq5 86 Qualcosa non va.

Dmitry!

Leggete attentamente cos'è una funzione e cos'è una chiamata di funzione

Hai un casino completo di dichiarazioni e usi

 
Dimka-novitsek: Voglio capire, quanto è 1 lotto? È possibile calcolarlo programmaticamente? Sono tre giorni che penso e leggo. E i lotti possono essere diversi ovunque - dipende dal tipo di transazione e dal conto!
Se la tua risposta alla seconda domanda, prova a trovare l'articolo"The ABCs of Currency Trading" dal suo titolo. Sembra essere scritto per MT4, ma non è troppo speciale.
 

Grazie!

Sì, la funzione double-pred è colpa mia...

 

Si acciglia ancora... Diciamo action=ORDER_TYPE_SELL, dice 'action' - identificatore non dichiarato. OppureENUM_ORDER_TYPE action=ORDER_TYPE_SELL, dice 'action' - token inaspettato.

È ovunque... E in inglese...

 for (int i=0;i<10;i=i+0.1){ Print( "i ",i);  
  OrderCalcMargin(
       ENUM_ORDER_TYPE  action=ORDER_TYPE_SELL,           // тип ордера
                  symbol=_Symbol,           // имя символа
                  volume=i,           // объем
                  price=last_tick.bid,            // цена открытия
                 margin            // переменная для получения значения маржи
   ); 
   Print( " margin  ", margin );  }