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

 

これが専門家自身だ - 不要なものを取り除き、多くのバッシングがあった :)

ファイル:
 

注文をキャンセルするにはどうすればよいですか?

こんな感じで開きました。

mrequest.action = TRADE_ACTION_DEAL; // 即時実行

mrequest.price = NormalizeDouble(Ask,_Digits); // 直近のAsk価格

mrequest.sl = NormalizeDouble(Ask - 10000*_Point,_Digits); // ストップ・ロス

mrequestを使用します。tp = 0; // テイクプロフィット

mrequest.symbol = _Symbol; // シンボル

mrequestを使用します。volume = Lots; // 取引するロット数

mrequestを使用します。magic = 1; // マジックナンバー

mrequest.type = ORDER_TYPE_BUY; // 買い注文

mrequest.type_filling = ORDER_FILLING_FOK; //注文の種類- all or nothing

mrequestを使用します。deviation=100; // 現在値からのスリッページ

OrderSend(mrequest,mresult)を実行。

問題は、複数の未決済注文があり、選択した注文を決済する必要があることです...。

 
Forex_Noob: 注文をキャンセルするには?

問題は、開いている注文が1つではなく、複数あり、選択的に閉じる必要があることです...。

1.コードを 正しく挿入してください。

2.一方向に複数の注文が出された場合、結果は1つのポジションに集約されます。

3.建玉を 決済するには、決済する建玉の数量と同じ数量の反対方向の注文を出す必要があります。

4.ポジションの一部だけを決済する必要がある場合、それに対応する数量の反対方向の注文を公開する必要があります。

 
Yedelkin:

1.コードを 正しく挿入してください。

2.同じ方向に複数の注文が出された場合、結果は1つのポジションに集約されます。

3.建玉を 決済するには、決済する建玉の数量と同じ数量の反対方向の注文を出す必要があります。

4.もし、ポジションの一部だけを決済する必要がある場合、反対売買の注文を対応する総量で発注する必要があります。

OK、ありがとうございます。唯一の問題は、ポジションが常に決済注文で決済されるとは限らないことです...。
 
Forex_Noob:
OK、ありがとうただ今、別の問題が発生しました。決済注文が常にポジションを決済しないのです...。
ログブックを見てください。結果はそこに記録されています。
 

イェデルキン、レシェトフ

こんにちは。

1つのインジケーターから複数のペアのデータを抽出する最も簡単な方法は何ですか?

string Currency1 = "GBPUSD";
string Currency2 = "EURUSD";
string Currency3 = "USDCHF";
string Currency4 = "USDJPY";
int ATRHandle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  for(int c=0;c<4;c++){
  SymbolSelect(Currency1,true);
  SymbolSelect(Currency2,true);
  SymbolSelect(Currency3,true);
  SymbolSelect(Currency4,true);
  }
  ATRHandle = iATR(Symbol(),PERIOD_M1,1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(ATRHandle);
   Comment("");        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//Например так,как показал
  }
//+------------------------------------------------------------------+
ありがとうございました。
 
mario065: 1つのインジケーターから複数のペアのデータを 取得する最も簡単な方法・やり方は?

こういうことですか?

ATRHandle1 = iATR(Currency1,PERIOD_M1,1);
ATRHandle2 = iATR(Currency2,PERIOD_M1,1);
ATRHandle3 = iATR(Currency3,PERIOD_M1,1);
ATRHandle4 = iATR(Currency4,PERIOD_M1,1);
 
Yedelkin:

これのこと?

こんにちは。

もちろん、そんなことはありません。

七面鳥が複数いる場合は、食べた数だけペアを作る必要があります。

1つのハンドラですべてのペアを使用することができます。

 
mario065: 複数の指標がある場合は、それぞれについて、食べるペアの数と同じだけ回数をこなす必要がある。1つのハンドラですべてのペアを使用することができます。

つまり、ハンドルは1つにしたいが、iATRの インジケーターは異なる文字で動作するということですか?

iATR インジケーターの説明から、1つのシンボルだけで動作するように設計 されていることが分かります。したがって、4文字で動作させるためには、iATR インジケータを4枚実行する必要があります。順番に、インジケータハンドルは 、特定のインジケータコピーの値にアクセスするために 必要 であり、4つのインジケータコピーを実行している場合、適切なハンドルをどこかに保存する必要があります。

もし、1つのハンドルしか使わないという質問が元本であれば、iATR インジケータが一度に複数のシンボルで動作 するように書き直し、それに応じた数の値の配列を持つ ようにするなどの工夫が必要になるはずです。そうすれば、1つのハンドルで

handle = myATR(Currency1,Currency2,Currency3,Currency4,PERIOD_M1,1);

を作成し、それを使ってmyATRからこのインジケーターバッファ またはこのインジケーターバッファへの アドレスを指定します。

 

このように(図式的に)書き出すこともできます。

string Currency[4] = {"GBPUSD","EURUSD","USDCHF","USDJPY"}; //могу ошибиться в части правильности записи присвоения значений, но проверить легко по Справочнику
int ATRHandle[4];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(int c=0;c<4;c++) SymbolSelect(Currency[с],true);
   for(int c=0;c<4;c++) ATRHandle[с] = iATR(Currency[с],PERIOD_M1,1);
   return(0);
  }
理由: