[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 118

 
Shixan:

午後

a=trueとb=trueの条件で2つの保留注文(BuyStopとSellStop)を開くコードを書き、しばらくしてEAが両方の注文を閉じ、新しいシグナルが現れるまで、しかし時々EAは同じ方向に2つの保留注文を開くのです。なぜこのようなことが起こるのか、この「バグ」を回避する方法は?



if (a=true && b=true)
{
int OrderCount = OrdersTotal();
if (OrderCount>1) return(0);
ticket1=OrderSend(Symbol()、OP_BUYSTOP、getLot()、PriceOpen_Buy、slippage、PriceOpen_Sell、0、0、Green)。
Sleep(1000)です。

ticket2=OrderSend(Symbol()、OP_SELLSTOP、getLot()、PriceOpen_Sell、slippage、PriceOpen_Buy、0、0、Green)。

Sleep(1000*59*TimeFrame);

for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());
if (OrderType()==OP_SELL ) OrderClose(OrderTicket(),OrderLots(),Ask, slippage);
if (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),Bid,slippage);
}

return(0)です。

}


ヒントを教えてください。

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

あなたのコードには目を通していませんが...1つのシグナルに2つ以上の注文を出さないために、注文を出す前に、このシグナルにすでに注文が入っていないかどうかチェックしてください。なければ-貼る、あれば-吸う。
 
mario065:

こんにちは。

設定で1:1の固定ウェイトでスケジュールを入力することは可能でしょうか?

可能であれば、その方法を教えてください。

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

このライブラリは、できます。

3.3 チャートのプロパティを設定する関数」関数ServiceSetScaleFix1To1()。

このライブラリは、ロシア語と英語のローカライゼーションでのみ動作します。あなたのところでも使えるかもしれません。

 
新しいビルド451で、MetaEditorでコンパイルするとき、2つ目のex 4ファイルがmq 4ファイルの隣のexpertsフォルダに表示されないのはなぜですか?
 

ここでは、注文受付機能を紹介します。

//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double price)
{
   int ticket = -1;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
   {
      if (i_sl > 0 && OrderStopLoss() == 0)
      {
         if (!OrderModify(ticket, OrderOpenPrice(), ND(SL), ND(TP), 0, Red))
         {
            Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError());
            Print("pt = ", pt);
            Print("Ask = ", Ask);
            Print("Bid = ", Bid);
            Print("SL_s = ", OrderOpenPrice() + i_sl * pt);
            Print("TP_s = ", OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return (true);
}

以下は、パラメータのプリントアウトです。

2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4499
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4519
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4513
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4515
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #1 sell stop 0.10 EURUSD at 1.45091 ok

ここでは、TPとSLがそれぞれAskとBidの下と上にあること、つまりすべてが正しいことがはっきりとわかります。しかし、なぜかstopがおかしいので修正エラーが 出ます。どうしてですか?

 
hoz:

ここでは、注文受付機能を紹介します。

以下は、パラメータのプリントアウトです。

ここでは、TPとSLがそれぞれAskとBidの下と上にあること、つまりすべてが正しいことがはっきりとわかります。しかし、なぜかstopがおかしいので修正エラーが出ます。どうしてですか?

叱られている内容も読んでいるのでしょうか?

err_invalid_function_paramvalue 4051 ファンクションパラメータの値が無効

わからないことがあったら、他の人と一緒に解決しよう......。

ZZY。保留注文を 出すと、文字列

if (price < Bid)

保留中の注文を出すときは、この文字列はかなり関係ないはずです。MarketInfo(Symbol(), MODE_STOPLEVEL)で設定した最小許容距離との対応関係を確認する必要がある。まず、すぐに目に飛び込んできたのは

2つ目は、注文が設定された価格を表示することです。ストップとテイクは、アスクとビッドに対してではなく、注文設定価格に対して設定する必要があります。

 
Zhunko:

このライブラリは、できます。

3.3 グラフプロパティ設定関数」関数ServiceSetScaleFix1To1()。

このライブラリは、ロシア語と英語のローカライズにのみ対応しています。あなたのところでも使えるかもしれません。

Zhunkoさん、ありがとうございます。
 
artmedia70:

叱られている内容も読んでいるのでしょうか?

err_invalid_function_paramvalue 4051 関数パラメータが無効な値である

呼び出された関数に渡されたパラメータを見る。 全く何もわからなくなったら、平和に解決しよう...。


もちろん読んでいますよ、だから気になるんです。 入力パラメータをすべてアンリンクしてみました。

これが、私が手に入れたものです。

bool OpenSell(double price)
{
   int ticket = -1;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
   {
      if (i_sl > 0 && OrderStopLoss() == 0)
      {
         Print("ND(price) = ", DoubleToStr(ND(price),Digits));
         Print("ND(SL) = ", DoubleToStr(ND(SL),Digits));
         Print("ND(TP) = ", DoubleToStr(ND(TP),Digits));
         Print("ND(OOP) = ", DoubleToStr(ND(OrderOpenPrice()),Digits));
         if (!OrderModify(ticket, ND(OrderOpenPrice()), ND(SL), ND(TP), 0, Red))
         {
            Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError());
            Print("pt = ", pt);
            Print("Ask = ", Ask);
            Print("Bid = ", Bid);
            Print("SL_s = ", OrderOpenPrice() + i_sl * pt);
            Print("TP_s = ", OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return (true);
}

以下はログの内容です。

2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4485
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4505
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4496
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4497
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(OOP) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(TP) = -0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(SL) = 0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(price) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #4 sell stop 0.10 EURUSD at 1.44946 ok

注文は変更されるものとされないものがあります。冒頭のND(TP),ND(SL)の値をランダムな値に戻した。なぜ?

ちなみに、正規化機能は私の ものです。

//+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
  return (NormalizeDouble(A, Digits));
}
 
artmedia70:

叱られている内容も読んでいるのでしょうか?

err_invalid_function_paramvalue 4051 関数パラメータが無効な値である

呼び出される関数に渡されるパラメータをご覧ください。まったく何もわからないときは、世界と一緒に整理する...。

ZS 保留注文を出すと、ライン

if (price < Bid)

これはちょっと適切ではありませんね。最小許容距離が MarketInfo(Symbol(), MODE_STOPLEVEL)で指定されたものと一致するか確認する必要があります。まず、すぐに目に飛び込んできたのが、この商品です。



このようなチェックは、通常、注文の変更では発生しますが、開封の際には発生しません。もう見たよ。 保留をbystopにしたら失敗しそう。また、10pipsのストップを設定した場合、StopLossの値よりも確実に高くなります。私はティックで取引しない :)
 
artmedia70:


2つ目は、注文が設定された価格を印刷することです。StopとTakeはAskとBidに対してではなく、注文が設定された価格に対して設定されるべきです。



これは改造用ということですね?結局、私たちが注文を出すときに重要視するのはBidとAskなのです。上の投稿ですべて整理しました。
 

こんにちは。

複数のウィンドウで同時にEAを動作させたいのですが、どうすればいいですか?ただし、1つの商品に対して1つしか注文を出すことができません。したがって、今は条件があります。

int total = OrdersTotal();

if (total<1) { 解析とオープンポジションのブロック} else { 解析とクローズポジションのブロック }.

さて、2つのシンボルで同時に開くと、片方で開くともう片方の作業が阻害されます。だから、似たようなものを作ってみたんです。

int total = OrdersTotal();

int cnt;

if(total>0)
{
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
Symbol_FLAG = true。
}
}
}

if(total<1 || total>0 && Symbol_FLAG == false) { 解析と ptposition ブロックのオープン}。

が、テスターではうまくいかない...。

もしかしたら、教えてくれるかもしれない、私が何か非現実的なことを企んでいるのかもしれない?