どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 65

 

皆さん、ごきげんよう。トラリピにストップロスを設定した場合、Strategy Testerではこの問題が発生しません。ストラテジーテスターでEAがストップロスを置くべき時に置かなかったが、定期的に置くようになった。デモ入金で同じExpert Advisorを使用すると、トロールが機能することがわかります。端末は何もエラーを報告しない。これはコードのバグなのか、それとも端末のバグなのでしょうか?理解するのに役立ちそうですか?私はすべてのコードを試しましたが、何が間違っているのか理解できません、私はトレイル戦略を変更したくありません。Expert Advisorのフルコードと、trawlのコード(Yury Dzyuban氏による ローソク足の陰影を少し修正したもの)を添付します。

void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent) {  
   int i;
   double new_extremum;

   if ((bars_n<1) || (indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET))) {
      Print("Трейлинг функцией TrailingByShadows() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
   } 
   if (OrderType()==OP_BUY) {
      for(i=1;i<=bars_n;i++) {
         if (i==1) new_extremum = iLow(Symbol(),tmfrm,i); else if (new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum = iLow(Symbol(),tmfrm,i);
      }  
  
      if ((((new_extremum - indent*Point)>OrderStopLoss() + 1.0 * Point) || (OrderStopLoss()==0)) && ((new_extremum - indent*Point)>OrderOpenPrice()) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point) && (getLots(new_extremum) > 0))
      if (!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
   }
   if (OrderType()==OP_SELL) {
      for(i=1;i<=bars_n;i++) {
         if (i==1) new_extremum = iHigh(Symbol(),tmfrm,i); else if (new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum = iHigh(Symbol(),tmfrm,i);
      }         
      if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss() - 1.0 * Point) || (OrderStopLoss()==0)) && ((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point) && (getLots(new_extremum) > 0))
      if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());     
   }      
}

double getLots(double newSL) {
   int opnTime = 0; // время открытия трейда для цикла пересчета позиций
   double lotSum = 0; 
   for (int i = 0; i <= OrdersTotal()-1; i++) {
      OrderSelect(i, SELECT_BY_POS);     
      if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { 
         opnTime = OrderOpenTime(); 
         if (OrderType() == OP_BUY)    { lotSum += OrderLots() * (newSL - OrderOpenPrice()) / Point; }
         if (OrderType() == OP_SELL)   { lotSum -= OrderLots() * (newSL - OrderOpenPrice()) / Point; }
      }
   }   
   return(lotSum);
}
ファイル:
avalanche.mq4  12 kb
 
どのようなタイムフレームで、どのような品質でテストするのですか?
 

EURUSD、M1、99%、90%。

最初はMTで読み込んだ標準のティック履歴を 使用していましたが、この問題だけでなく、相場履歴に説明できないギャップがあることが分かったので、Tick Data Suiteに切り替え、Dukascopyから相場をダウンロードし、品質を90から99に高めましたが、問題は解決していません。

ZS: おそらく実生活でも同じ状況なのか、テスト期間が短かったのか(3週間ほど)、その間、trawlがインストールされていないため、何度か手動で終了していましたが、定期的に端末機を切断していたため、EAの動作に何らかの影響を与えているのだと思っていました、最近1週間ほど前にVPSに移行しましたが、同じ状況を描いているようです

 

変数tmfrmの値と等しい時間枠でテストが行われているかどうか?

そうでない場合は、tmfrmの時間枠に履歴があるかどうかを確認する必要があります...。

と、変数 bars_n で伝送されるタンクの数は、変数 tmfrm で伝送されるタイムフレームに対応する ?

 
keekkenen:

変数tmfrmの値と等しい時間枠でテストが行われているかどうか?

そうでない場合は、tmfrmの時間枠に履歴があるかどうかを確認する必要があります...。

と、変数bars_nに渡された戦車の数は、変数tmfrmに渡された時間枠に対応しているのでしょうか。


そうですね、他人の関数のコードを放置して、深く調べず、そのパラメータを考慮していなかったのが原因でしょう。その結果、ストップロスは 別の期間に設定されました。よろしくお願いします。

ZS: いつもそうなんです。ちょっとしたことでコードが思い通りに動かなくなるんです。

 

こんにちは!ログブックの赤レンガが一体どうなっているのか、誰か知っていますか?

2013.08.05 08:00:41 '9291791': シグナル - 見つからない 更新シグナル - ベースで7400

私のコードには何の問題もない!しかも信号付きで!これはどういうことでしょうか?

 
Mepkypuu:


はい、おっしゃる通りのようです。私は他人の関数のコードを放置して、詳しく調べず、このパラメータを考慮していませんでした。その結果、ストップロスは別の期間に設定されました。よろしくお願いします。

ZS: いつもそうなんですが、ちょっとしたことでコードが思い通りに動かなくなるんです。


しかし、履歴を見ると、まだうまくいかない、つまり問題が部分的に解決されているに過ぎません。
 
splxgf:

スプレッドは固定ですか? ランの時は現在のスプレッドが取られますが、ニュースやイブニングの時は毎日のスプレッドと異なるからです。

スプレッドはどのように修正するのですか?結局、OrderSendは AskかBidのどちらかを指定する。
 
Mepkypuu:

まだ満足はしていません。トレーリングはより良く機能していますが、まだ機能しないケース、つまり問題は部分的にしか解決していません。

あなたがTrailingと呼ぶものは本当のTrailingではなく、異なる方法で計算されており、その動作は非論理的である可能性があります。
 
Leo59:

スプレッドはどのように修正すればよいのでしょうか?結局、OrderSendはAskかBidのどちらかを指定する。
TFの下にあるテスターで!