マーケットで公開されているEAにおける最小ストップの確認。 - ページ 11

 
Vladimir Gribachev:

MetaQuotes-Demoサーバー(モデレーターがテストしているところ)では、min.ストップレベルは普通に戻りますね。自分で確認する、0はしない。

どのサーバーでモデレーターをテストしているのか分かりませんが、トピックのスターターが停止レベルをチェックしていたので、エラー130の 改善に製品を戻したそうです。スレッドを最初から読んでください。
 
Vitalii Ananev:
テスト司会者がどこのサーバーか知りませんが、トピック発端は停止レベルのチェックがあり、エラー130で 改善するため製品が返送されたそうです。スレッドを最初から読んでください。

彼の場合、130はフクロウがストップロスをマーケットに近づけようとしたときだけに起こるのではないかもしれない。

slpの送信時や修正時に直接確認するのがよいでしょう。

 
Vladimir Gribachev:

質問、なぜリアルで ストップロスを1ポイントにしたのですか?

今思い出したけど...一度、このようなアルゴリズムをminストップロスでテストしてみましたが、基本的にチェックは同じで、利益だけでなくエラーもありませんでした。

私は60のマーケットプレイス製品を販売しました -- 80のフリーランスのタスクを書きました --Expert Advisorを書く ための広告サイトを持ちました。

そして、突然トピックスターターがストプレベリングゼロをどうするかと問いかけ、マーケットプレイスのモデレーターがなぜか変にマーケットプレイスのEAをチェックしていると言うのです。

彼のコメントとは対照的に、開発の経験があり、製品を世に送り出した経験のあるフォーラムのユーザーは、彼のコメントを読んで困惑している。

私には--トピックスターターが完全な不全状態にあり、露骨に問題を手から吸い取ってしまったように見える。

 
Andrey F. Zelinsky:

60のマーケットプレイス製品の販売者--地元のフリーランスで80のタスクを書いている--ライティングEAを 宣伝するウェブサイトを持っている--そしてこのすべてが1年目にはほど遠い--がトピックスターターである。

そして、突然トピックスターターがストプレベリングゼロをどうするかと問いかけ、マーケットプレイスのモデレーターがなぜか変にマーケットプレイスのEAをチェックしていると言うのです。

彼のコメントとは対照的に、開発の経験があり、製品を世に送り出した経験のあるフォーラムのユーザーは、彼のコメントを読んで困惑している。

私には--トピックスターターが完全な不全状態にあり、露骨に問題を手から吸い取ってしまったように見える。

コミュニケーションを取りたいだけなのかも?) ボットのプログラミングは非常に孤独なビジネスである
 
lilita bogachkova:

をクリックすると、ここに掲載されているコードが表示されます。

double point=SymbolInfoDouble(symToWorkmodify,SYMBOL_POINT);
int spread=(ask-bid)/point;

その方法ではポイントで割ることができないので、SymbolInfoDouble(symToWorkmodify,SYMBOL_POINT) 関数の値がゼロに等しくなる可能性があります。
これは、他の市場機能にも当てはまります。

例えば、2010年大会の計算でAccountInfoInteger(ACCOUNT_LEVERAGE) を使用した場合、OnInit でこの関数が 0 を返すと、一部の EA がZero divide エラーでクラッシュ することがあります。

 
Vladimir Gribachev:

質問、なぜリアルで ストップロスを1ポイントにしたのですか?

今思い出したけど...以前、同様のアルゴリズムを最小限のストップロスでテストしたことがありますが、チェックは基本的に同じで、エラーもなく、利益も出ませんでした。

根本を見よ。これは、私がなぜ1ピップのストップロスを設定したかということではありません。ポイントは、ブローカーが隠しているストップロスを、スプレッド幅を元に計算したストップロスより少なくすることができる点です。

問題を明確にするために、あなたのアルゴリズムを使ってストップをチェックするExpert Advisorをお見せしています。

#property strict
//--- input parameters
input int      i_slSize          = 10;
input int      i_tpSize          = 10;
input int      i_magicNumber     = 32847623;

int OnInit()
{
   Print("Величина стоплевел: ", MarketInfo(_Symbol,MODE_STOPLEVEL));
   return(INIT_SUCCEEDED);
}

int GetExpertOrderTicket()
{
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))          
         continue;
         
      if (OrderSymbol() != Symbol())
         continue;   
         
      if (OrderMagicNumber() != i_magicNumber)
         continue;
         
      if (OrderType() == OP_BUY)
         return OrderTicket();
   }
   
   return -1;
}

void OnTick()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0)
   {
      ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 0.0, 0.0, NULL, i_magicNumber);
      return;
   }
      
   if (!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0 || OrderStopLoss() > 0.0 || OrderTakeProfit() > 0.0)
      return;
      
   double SL=NormalizeDouble(OrderOpenPrice()-MathMax(i_slSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   double TP=NormalizeDouble(OrderOpenPrice()+MathMax(i_tpSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   
   bool result = OrderModify(ticket, 0.0, SL, TP, 0);
}

このようなExpert Advisorのテスト結果

0       14:52:30.354    Expert CheckStopLevel EURUSD,H1: removed
0       14:52:30.372    Expert CheckStopLevel EURUSD,H1: loaded successfully
0       14:52:30.390    Tester: template 'D:\ForexDC\Alpari\templates\tester.tpl' applied
0       14:52:30.395    TestGenerator: current spread 10 used
2       14:52:32        2015.01.12 00:00  CheckStopLevel inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
0       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: Величина стоплевел: 0.0
2       14:52:32        2015.01.12 00:00  CheckStopLevel EURUSD,H1: open #1 buy 0.01 EURUSD at 1.18674 ok
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:35        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130
3       14:52:36        2015.01.12 00:00  CheckStopLevel EURUSD,H1: OrderModify error 130

見ての通り、この方法は初歩的なテストに合格していない。

 
Ihor Herasko:

根本に迫る。なぜ1ポイントのストップロスを入れるべきかということではありません。それは、約...

根本を突き詰めれば--a)「開発者の買い手を バカにすること」とb)「買い手がバカであることを当てにすること」を区別しなければならない。それらは異なるプロテクションです。

まともなバイヤーなら、マイナスのテイクを入れてストップすることはない。したがって、「マイナスの逆指値にEAがどう反応するか」を確認することは、購入者が馬鹿であることを当てにしていることになります。

ユーザーが定義したテイクとストップが「2スプレッド」という理解しがたい値で永久に増加するEAを作成する- これは「フールプルーフ」であり、「開発者のバカ」に対する保護でしかありません。

特に、開発者が市場の節度を守るために、そのようなプロテクトをかけるのであれば。

 
Andrey F. Zelinsky:

根本を見れば、a)「開発者購入者を バカにする」ことと、b)「購入者がバカであることを当てにする」ことは区別しなければならないのです。これらは、異なる保護機能です。

まともなバイヤーなら、マイナスのテイクを入れてストップすることはない。したがって、「マイナスの逆指値にEAがどう反応するか」を確認することは、購入者が馬鹿であることを当てにしていることになります。

ユーザーが定義したテイクとストップを「2スプレッド」という理解不能な量で強制的に連続上昇させるEAを作る ことは、「馬鹿な開発者」の製品を購入しないことで、初めて「馬鹿にできる」のです。

ここにまともな人がたくさんいると思いますか?:)特にバイヤーの間では。
 
Ihor Herasko:

根本に迫る。なぜストップロスを1pipにするのか、ということではありません。ブローカーが隠している、スプレッド幅を元に算出されるストップロスより少なくなる可能性があるということです。

問題を明確にするために、あなたのアルゴリズムを使ってストップをチェックするExpert Advisorをお見せしています。

このようなExpert Advisorのテスト結果

見ての通り、このメソッドは初歩的なチェックをパスしない。

そんなにひどいなら、ここで

#property strict
//--- input parameters
input int      i_slSize          = 10;
input int      i_tpSize          = 10;
input int      i_magicNumber     = 32847623;

int OnInit()
{
   Print("Величина стоплевел: ", MarketInfo(_Symbol,MODE_STOPLEVEL));
   return(INIT_SUCCEEDED);
}

int GetExpertOrderTicket()
{
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS))          
         continue;
         
      if (OrderSymbol() != Symbol())
         continue;   
         
      if (OrderMagicNumber() != i_magicNumber)
         continue;
         
      if (OrderType() == OP_BUY)
         return OrderTicket();
   }
   
   return -1;
}

void OnTick()
{
   int ticket = GetExpertOrderTicket();
   if (ticket < 0)
   {
      ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 0.0, 0.0, NULL, i_magicNumber);
      return;
   }
      
   if (!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0 || OrderStopLoss() > 0.0 || OrderTakeProfit() > 0.0)
      return;
      
   double SL=NormalizeDouble(Bid-MathMax(i_slSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   double TP=NormalizeDouble(Bid+MathMax(i_tpSize,(int)MarketInfo(_Symbol,MODE_STOPLEVEL))*_Point,_Digits);
   
   bool result = OrderModify(ticket, 0.0, SL, TP, 0);
}

ログ

2016.03.16 15:09:35.611 GBPUSD,H1: 94 tick events (1095 bars, 286082 bar states) processed in 0:00:06.037 (total time 0:00:10.109)
2016.03.16 15:09:35.611 2016.03.01 00:12  Tester: order #14  is closed
2016.03.16 15:09:35.588 2016.03.01 00:12  Tester: stop button pressed
2016.03.16 15:09:35.547 2016.03.01 00:12  abcd GBPUSD,H1: modify #14  buy 0.01 GBPUSD at 1.39165 sl: 1.39130 tp: 1.39154 ok
2016.03.16 15:09:35.483 2016.03.01 00:12  abcd GBPUSD,H1: open #14  buy 0.01 GBPUSD at 1.39165 ok
2016.03.16 15:09:35.483 2016.03.01 00:12  Tester: take profit #13  at 1.39144 (1.39144 / 1.39165)
2016.03.16 15:09:35.099 2016.03.01 00:12  abcd GBPUSD,H1: modify #13  buy 0.01 GBPUSD at 1.39156 sl: 1.39120 tp: 1.39144 ok
2016.03.16 15:09:35.035 2016.03.01 00:11  abcd GBPUSD,H1: open #13  buy 0.01 GBPUSD at 1.39156 ok
2016.03.16 15:09:35.035 2016.03.01 00:11  Tester: stop loss #12  at 1.39148 (1.39135 / 1.39156)
2016.03.16 15:09:34.971 2016.03.01 00:11  abcd GBPUSD,H1: modify #12  buy 0.01 GBPUSD at 1.39171 sl: 1.39148 tp: 1.39172 ok
2016.03.16 15:09:34.907 2016.03.01 00:11  abcd GBPUSD,H1: open #12  buy 0.01 GBPUSD at 1.39171 ok
2016.03.16 15:09:34.907 2016.03.01 00:11  Tester: take profit #11  at 1.39143 (1.39150 / 1.39171)
2016.03.16 15:09:34.267 2016.03.01 00:10  abcd GBPUSD,H1: modify #11  buy 0.01 GBPUSD at 1.39147 sl: 1.39119 tp: 1.39143 ok
2016.03.16 15:09:34.203 2016.03.01 00:10  abcd GBPUSD,H1: open #11  buy 0.01 GBPUSD at 1.39147 ok
2016.03.16 15:09:34.203 2016.03.01 00:10  Tester: stop loss #10  at 1.39132 (1.39126 / 1.39147)
2016.03.16 15:09:33.947 2016.03.01 00:10  abcd GBPUSD,H1: modify #10  buy 0.01 GBPUSD at 1.39174 sl: 1.39132 tp: 1.39156 ok
2016.03.16 15:09:33.883 2016.03.01 00:10  abcd GBPUSD,H1: open #10  buy 0.01 GBPUSD at 1.39174 ok
2016.03.16 15:09:33.883 2016.03.01 00:10  Tester: stop loss #9  at 1.39157 (1.39153 / 1.39174)
2016.03.16 15:09:33.435 2016.03.01 00:09  abcd GBPUSD,H1: modify #9  buy 0.01 GBPUSD at 1.39186 sl: 1.39157 tp: 1.39181 ok
2016.03.16 15:09:33.371 2016.03.01 00:09  abcd GBPUSD,H1: open #9  buy 0.01 GBPUSD at 1.39186 ok
2016.03.16 15:09:33.371 2016.03.01 00:09  Tester: take profit #8  at 1.39163 (1.39165 / 1.39186)
2016.03.16 15:09:32.603 2016.03.01 00:06  abcd GBPUSD,H1: modify #8  buy 0.01 GBPUSD at 1.39173 sl: 1.39139 tp: 1.39163 ok
2016.03.16 15:09:32.539 2016.03.01 00:06  abcd GBPUSD,H1: open #8  buy 0.01 GBPUSD at 1.39173 ok
2016.03.16 15:09:32.539 2016.03.01 00:06  Tester: take profit #7  at 1.39152 (1.39152 / 1.39173)
2016.03.16 15:09:32.346 2016.03.01 00:06  abcd GBPUSD,H1: modify #7  buy 0.01 GBPUSD at 1.39173 sl: 1.39128 tp: 1.39152 ok
2016.03.16 15:09:32.282 2016.03.01 00:06  abcd GBPUSD,H1: open #7  buy 0.01 GBPUSD at 1.39173 ok
2016.03.16 15:09:32.282 2016.03.01 00:06  Tester: take profit #6  at 1.39148 (1.39152 / 1.39173)
2016.03.16 15:09:32.025 2016.03.01 00:05  abcd GBPUSD,H1: modify #6  buy 0.01 GBPUSD at 1.39155 sl: 1.39124 tp: 1.39148 ok
2016.03.16 15:09:31.961 2016.03.01 00:05  abcd GBPUSD,H1: open #6  buy 0.01 GBPUSD at 1.39155 ok
2016.03.16 15:09:31.961 2016.03.01 00:05  Tester: stop loss #5  at 1.39140 (1.39134 / 1.39155)
2016.03.16 15:09:31.249 2016.03.01 00:04  abcd GBPUSD,H1: modify #5  buy 0.01 GBPUSD at 1.39170 sl: 1.39140 tp: 1.39164 ok
2016.03.16 15:09:31.185 2016.03.01 00:04  abcd GBPUSD,H1: open #5  buy 0.01 GBPUSD at 1.39170 ok
2016.03.16 15:09:31.185 2016.03.01 00:04  Tester: take profit #4  at 1.39147 (1.39149 / 1.39170)
2016.03.16 15:09:30.801 2016.03.01 00:02  abcd GBPUSD,H1: modify #4  buy 0.01 GBPUSD at 1.39159 sl: 1.39123 tp: 1.39147 ok
2016.03.16 15:09:30.737 2016.03.01 00:01  abcd GBPUSD,H1: open #4  buy 0.01 GBPUSD at 1.39159 ok
2016.03.16 15:09:30.737 2016.03.01 00:01  Tester: take profit #3  at 1.39136 (1.39138 / 1.39159)
2016.03.16 15:09:30.481 2016.03.01 00:01  abcd GBPUSD,H1: modify #3  buy 0.01 GBPUSD at 1.39143 sl: 1.39112 tp: 1.39136 ok
2016.03.16 15:09:30.417 2016.03.01 00:01  abcd GBPUSD,H1: open #3  buy 0.01 GBPUSD at 1.39143 ok
2016.03.16 15:09:30.417 2016.03.01 00:01  Tester: stop loss #2  at 1.39126 (1.39122 / 1.39143)
2016.03.16 15:09:30.225 2016.03.01 00:00  abcd GBPUSD,H1: modify #2  buy 0.01 GBPUSD at 1.39156 sl: 1.39126 tp: 1.39150 ok
2016.03.16 15:09:30.161 2016.03.01 00:00  abcd GBPUSD,H1: open #2  buy 0.01 GBPUSD at 1.39156 ok
2016.03.16 15:09:30.161 2016.03.01 00:00  Tester: take profit #1  at 1.39135 (1.39135 / 1.39156)
2016.03.16 15:09:29.647 2016.03.01 00:00  abcd GBPUSD,H1: modify #1  buy 0.01 GBPUSD at 1.39148 sl: 1.39111 tp: 1.39135 ok
2016.03.16 15:09:29.583 2016.03.01 00:00  abcd GBPUSD,H1: open #1  buy 0.01 GBPUSD at 1.39148 ok
2016.03.16 15:09:29.583 2016.03.01 00:00  abcd GBPUSD,H1: Величина стоплевел: 12.0
2016.03.16 15:09:29.574 2016.03.01 00:00  abcd inputs: i_slSize=10; i_tpSize=10; i_magicNumber=32847623; 
2016.03.16 15:09:27.513 TestGenerator: current spread 21 used

と問題なし。

まあ、そこまで言うなら、Andrey F. Zelinskyが 正しく指摘しているように

マーケットプレイスのモデレーションに行くためだけにEAを悪化させるのであれば、それは不充分な ことです。

私のEAが130回目のエラーをチェックしておらず、ストップに+1が追加されている場合。しかし、それはナンセンスだ。
 
Maxim Dmitrievsky:
ここにまともな人がたくさんいると思いますか?:)特にバイヤーの間では。

調査してみると、まともな開発者よりもまともな購買者のほうが多いんですよ。

買い手が間違っていることもある。お客さまに理解していただくことができます。説得することができます。

しかし、開発者が常識的に考えて問題があるとすれば、それは解決できない。

Expert Advisorの機能を損ない、Marketに行くだけでは、不十分です。