Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 42

 

Добрый день! Не могу сообразить как в MQL5 сделать одну простую вещь. Мне необходимо объявить переменную уровня класса (тип трехмерный массив double) и затем сделать ее позднюю инициализацию в конструкторе. В C# это выглядело бы так:

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

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

}

 

 Как добиться аналогичного результата в MQL5? Я могу объявить трехмерный динамический массив. Но функцией ArrayResize я затем могу выделить память только под первое измерение, как быть с оставшимися двумя?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Доброго дня! Уважаемые  форумчане! А может кто то подсказать тут 
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
Не удалось отправить торговый запрос

 

А почему не удалось? Может мастера професионалы быстро подскажут куда смотреть, а то я так и до вечера может гадать буду.. 

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
Dimka-novitsek:
Доброго дня! Уважаемые  форумчане! А может кто то подсказать тут 

ERR_TRADE_SEND_FAILED
4756
Не удалось отправить торговый запрос

 

А почему не удалось? Может мастера професионалы быстро подскажут куда смотреть, а то я так и до вечера может гадать буду.. 

а гадать и не надо, надо посмотреть информацию в MqlTradeRequest request, не зря же вы его создавали

Ну а для начала вы не указали цену по которой продавать планируете

 
Dimka-novitsek: быстро подскажут куда смотреть, а то я так и до вечера может гадать буду.. 
Для начала надо посмотреть, сколько обязательных полей должно быть заполнено у переменной request для этого типа действия.
 
Спасибо!!!  Я как-то подумал, что при мгновенном исполнении цена понятная..
 
Доброго дня! Я не совсем пойму, как использовать функцию 
 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' - function can be declared only in the global scope депозита.mq5 86 8    Что-то не то, короче.

Вообще вопрос- я хочу создать функцию использования процента от депозита. Например 50% это сделка на полдепо. Хочу вот вобще понять, собствено 1 лот это сколько?? Можно ли его программновычислить? Третий день думаю, читаю-не понял. А лот еще и разный всюду может ведьбыть- от типа сделки зависит, от счёта!! 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Dimka-novitsek:
Доброго дня! Я не совсем пойму, как использовать функцию 

'OrderCalcMargin' - function can be declared only in the global scope депозита.mq5 86 8    Что-то не то, короче.

Дмитрий!

Прочитайте внимательно что такое функция и что такое вызов функции

У вас сейчас полная каша из объявления и использования

 
Dimka-novitsek: Хочу вот вобще понять, собствено 1 лот это сколько?? Можно ли его программновычислить? Третий день думаю, читаю-не понял. А лот еще и разный всюду может ведьбыть- от типа сделки зависит, от счёта!! 
Димон Владимирыч, для получения ответа на второй вопрос попробуй найти вот эту статью: "Азбука торговли валютами", по названию. Написана, вроде, под МТ4, но ничего сверхъестественного.
 

Спасибо!

 

Да, дубле пиред функцией- это я лоханулся.. 

 

Всё же ругается.. Допустим так  action=ORDER_TYPE_SELL,  ругается так 'action' - undeclared identifier.  А так  ENUM_ORDER_TYPE action=ORDER_TYPE_SELL,  ругается эдак 'action' - unexpected token.

И так всюду..   И по-английски...

 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 );  }
Причина обращения: