MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1468

 
皆さん、ごきげんよう。
私はmql4で、価格が最も近いローカル最小値から30ピップ上昇するたびに、分足チャートで注文を開く簡単なコードを書きました。注文を開始した後、現地の安値が注文の開始価格となる。
void OnTick()
{
if (Bid<LoU)
LoU=Bid;
//********************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
}
}

自分のコードの嫌なところ......。ほぼすべてのティックで実行されなければならないこと。私はこのコードを改善することができ、それはすべてのティックで実行されませんが、ほぼすべての分ローソクに実行されます。つまり、プログラムは注文が開かれるポイントを見つけるために膨大な作業をしなければならないのです。

Q:

ティックやローソク足を試さずに、あるいは最小限の試行で、つまりプログラムがオープンポイントを見つけるのにできるだけ時間を かけないように、私のコードで述べた注文のオープンポイントを見つけるのに役立つ言語構造を提案していただけませんか。

よろしくお願いします。

 
ANDREY:
皆さん、ごきげんよう。私はmql4で、価格が最も近いローカル最小値から30ピップ上昇するたびに、分足チャートで注文を開く簡単なコードを書きました。注文を開始した後、現地の安値が注文の開始価格となる。

自分のコードの嫌なところ......。ほぼすべてのティックで実行する必要があります。私はこのコードを改善することができ、それはすべてのティックで実行されませんが、ほぼすべての分ローソクに実行されます。つまり、プログラムは注文が開かれるポイントを見つけるために膨大な作業をしなければならないのです。

Q:

ティックやローソク足を試さずに、あるいは最小限の試行で、つまりプログラムがオープンポイントを見つけるのにできるだけ時間を かけないように、私のコードで述べた注文のオープンポイントを見つけるのに役立つ言語構造を提案していただけませんか。

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

//+------------------------------------------------------------------+
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

よろしくお願いします。

しかし、私のコードの結果は、私と同じではありません。2010年1月4日から2010年1月5 日までの1日間に渡って、GBPUSDの分足チャートで私のコードを実行した結果です
これは私のコードの結果
です。

そして、これはあなたのコードの結果です。

 
ANDREY:

よろしくお願いします。

しかし、私のコードの結果は、私と同じではありません。2010年1月4日から2010年1月5 日までの1日間に渡って、GBPUSDの分足チャートで私のコードを実行した結果です
これは私のコードの結果
です。

これは、あなたのコードの結果です

コードの表示 OnInit()

 
MakarFX:

OnInit()のコードを見せてください。

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }

MetaEditorにあなたのコードをコピーしたところ、上記のような結果が得られました。

あなたのコードでは注文をオープンして30ピップス下方にカウントし(黄色)、私のは下方にカウントします(青色)。

ご協力ありがとうございました

 
ANDREY:

MetaEditorにあなたのコードをコピーしたところ、上記のような結果になりました。

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

ポイントを理解するために、あなたのコードが必要です。

あなたのコードでは、価格が下がるとLoUは毎ティック 変化しますが、私のコードでは、LoUは取引を開始した後にのみ変化します。

 
MakarFX:

何が言いたいのか理解するために、あなたのコードが必要なのです。

あなたのコードでは、価格が下がるとLoUが毎ティックで 変化しますが、私のLoUは取引が開始された後にのみ変化します。

30pipsの差が出ていますね。私は前のポストに画像を追加しました
そして、私のコードは最初のポストにあります。 価格がローカル最小値*ボトムアップ*から30ピップを通過するとすぐに - 注文を開く.そして、私のコードは、私が必要とするとおりに注文を開くのです。でも、そのために使う時間は最小限にしてほしいんです。

私のコードでは、LoUは各注文の開始後、各ティックで変更さ れることに同意します。これがないと、プログラムは最も近いローカル・ミニマムを見つけることができず、そこから30ピップスカウントする必要があります。私は、LoUが毎ティック、毎分ローソク足で変化しない ように、解決策を見つけようとしていますが、注文は私のコードがそれらを開くのと同じ場所で開か れます。
 
ANDREY:

MetaEditorにあなたのコードをコピーしたところ、上記のような結果が得られました。

あなたのコードでは注文をオープンして30ピップス下方にカウントし(黄色)、私のは下方にカウントします(青色)。

ご協力ありがとうございました

私の勘違い...交換

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid-30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

私の勘違い...交換

ご協力ありがとうございました。
しました。膨大な数のオーダー(27657件)が開かれ、その中に私が必要とするオーダーも含まれています。

初期注文の画面はこちら

 
MakarFX:

私の勘違い...交換

以下は、変更した行を含むあなたのコードです。

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
必要な注文だけを開くコードにするにはどうしたらよいですか?