Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 42

 

Boa tarde! Não consigo perceber como fazer uma coisa simples na MQL5. Preciso de declarar uma variável de nível de classe (tipo array tridimensional duplo) e depois fazer a sua inicialização tardia em construtor. Em C# pareceria assim:

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

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

}

Como obter o mesmo resultado na MQL5? Posso declarar uma matriz dinâmica tridimensional. Mas com a função ArrayResize posso atribuir memória apenas para a primeira dimensão, e as outras duas?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Bom dia! Caros utilizadores do fórum, Alguém pode por favor aconselhar aqui
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
Falha no envio do pedido comercial

Porque é que não funcionou? Talvez os profissionais me possam dizer rapidamente onde procurar, senão adivinho até hoje à noite.

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
Dimka-novitsek:
Bom dia! Caros utilizadores do fórum, alguém lhe pode dar algumas dicas aqui?

ERR_TRADE_SEND_FAILED
4756
Falha no envio de um pedido comercial

Porque é que não funcionou? Talvez os profissionais lhe digam rapidamente onde procurar, caso contrário adivinharei até ao anoitecer.

Não precisa de adivinhar, precisa de ver a informação no pedido MqlTradeRequest, criou-a por uma razão.

Bem, para começar, não especificou o preço a que planeia vender

 
Dimka-novitsek: Gostaria de saber onde procurar rapidamente, senão adivinharei até esta noite...
Primeiro, é necessário ver quantos campos obrigatórios devem ser preenchidos para a variável de pedido para este tipo de acção.
 
Obrigado!!! De alguma forma pensei que com a execução imediata o preço era compreensível....
 
Bom dia! Não compreendo bem como utilizar a função
 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' - função só pode ser declarada no depósito de âmbito global.mq5 86 Algo está errado, em suma.

Em geral, quero criar uma função que utilize uma percentagem do depósito. Por exemplo, 50% é um acordo sobre metade do meu depósito. Quero compreender quanto é 1 lote? Pode ser calculado de forma programática? Estive a pensar e a ler durante o terceiro dia. E os lotes podem ser diferentes em todo o lado - depende do tipo de transacção e da conta!

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Dimka-novitsek:
Bom dia! Não compreendo bem como utilizar a função

OrderCalcMargin' - a função só pode ser declarada no âmbito global do depósito.mq5 86 Algo está errado.

Dmitry!

Leia atentamente o que é uma função e o que é uma chamada de função

Tem uma confusão completa de declarações e utilizações

 
Dimka-novitsek: Quero compreender, quanto é 1 lote? É possível calculá-lo de forma programática? Há três dias que estou a pensar e a ler. E os lotes podem ser diferentes em todo o lado - depende do tipo de transacção e da conta!
Se a sua resposta à segunda pergunta, tente encontrar o artigo"The ABCs of Currency Trading" pelo seu título. Parece ter sido escrito para o MT4, mas não é muito especial.
 

Obrigado!

Sim, a função de duplo vermelho é culpa minha...

 

Ainda se afasta... Digamos acção=ORDER_TYPE_SELL, diz 'action' - identificador não declarado. OuENUM_ORDER_TYPE action=ORDER_TYPE_SELL, diz "acção" - símbolo inesperado.

Está em todo o lado... E em inglês...

 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 );  }
Razão: