初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 42

 

こんにちは!MQL5で1つの簡単なことをする方法がわかりません。クラスレベルの変数(3次元配列double型)を宣言し、コンストラクタで後期初期化する必要があります。C#では次のようになります。

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

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

}

MQL5で同じ結果を得るにはどうすればよいですか?3次元の動的 配列を宣言できるしかし、ArrayResize関数では、1次元目のメモリだけを確保することができ、他の2次元はどうなるのでしょうか?

Документация по 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リクエストの情報を見て、あなたは理由のためにそれを作成する必要があります。

まず、販売価格が明記されていません。

 
Dimka-novitsek: どこを見ればいいのかすぐにわかるようにしておかないと、今夜まで推理してしまうので...。
まず、このタイプのアクションのリクエスト変数に対して、いくつの必須フィールドが埋められなければならないかを確認する必要があります。
 
ありがとうございます!!!なんとなく即実行で値段も納得できると思っていたのですが...。
 
ごきげんよう。機能の使い方がよくわかりません。
 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 global scope deposit.mq5 86 要するに何かがおかしい。

一般的には、預金の何%かを使うような機能を作りたい。例えば、50%は私の預金の半分の取引です。1ロットがいくらなのか把握したいのですが?プログラムで計算できるのか?もう3日目ですが、考えたり読んだりしています。そして、ロットはどこでも異なるかもしれません - それは取引の種類と アカウントに依存します。

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Dimka-novitsek:
ごきげんよう。機能の使い方がよくわかりません。

OrderCalcMargin' - この関数は deposit.mq5 86 のグローバルスコープでのみ宣言できます。

ドミトリー!

関数とは 何か、関数呼び出しとは 何かをよく読みましょう

宣言と用途が完全にごちゃごちゃになっていますね

 
Dimka-novitsek: 知りたいのは、1ロットはいくら なのか?プログラムで計算することは可能ですか?3日前から考えたり読んだりしています。そして、ロットはどこでも異なるかもしれません - それは取引の種類と アカウントに依存します。
2番目の質問に対する答えが、「為替取引のABC」という 記事であれば、そのタイトルから探してみてください。MT4用に書かれているようですが、あまり特別なものではありません。
 

ありがとうございました。

そう、ダブルプレッド機能は私のせいなんです...。

 

まだ、しかめっ面をしている...。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 );  }
理由: