アドバイザーを無料でお書きします - ページ 149

 
DDM77:
ボットのテスト後、正式な発注が可能です

美しい表現です。)

 
Александр:

二転三転

具体的にどこが変わったのでしょうか?

 

こんにちは、同僚たち。

その話題は今でも有効ですか?無償でロボットを開発してくれるパトロンはいないのか?

.mq4コーダーの得意なアシスタントが必要です。

私もプログラマーですが、mq4は苦手で、どう表現したらいいのかわからない、あるいはうまくいかない問題があります。

簡単なスキャルピング戦略(M15-M30)と初期に書いたロボットを持っています。改善する必要がある。

私のサイトへのリンクは、私の宣伝とはみなされません。

RVI 50

EMA 9

EMA 100

ロングポジションのエントリー条件

EMA9がEMA100と下から上へ交差している場合、RVIも下から上へ交差しているか、無の線を超えている必要があります。この条件を満たした場合、買いポジションを建て、ストップロスは 直近の最小値より2-3ポイント下に置きます。テイクプロフィットは ストップロスの1.5倍から2倍です。

ショートポジションのエントリー条件

EMA9がEMA100を上から下にクロスしていること、RVI指標も無相関線を上から下にクロスするか、無相関線より下にあることが条件となります。この条件を満たした場合、売りポジションを建てる。ストップロスは、直近の最大値のすぐ上に置かれます。テイクプロフィットは ストップロスの1.5倍から2倍です。


私は原始的なロボットを書いているが、私は動作しない何かを修正する必要があるため、それは負けている、プラス多分誰かが偽の信号をフィルタリングする方法いくつかのアイデアを持っている?(もちろんそうなんだけど)...。

何がダメで、何を直さなければならないか。

1.ストップロスとテイクプロフィットはそれぞれ100と200に固定されていますが、このレベルでは十分ではありません。過去X バーのローソク足のセットから最小/最大 ストップロスを計算し(入力パラメータにX バーを設定)、そこから利食いする必要があります。 自分ではどうすればいいかわかりません。最も重要な点は、シグナルが正しく、利益がさらに上がったはずなのに、ストップで決済してしまったために、ロボットがまさに失敗してしまったことです。

2.ロボットが、同じバーで 注文を開くことをチェックしているにもかかわらず、なぜか何ティックかの間に複数の注文を(テスターで)開いてしまいます(このフォーラムから拝借しました)、うまくいきません。チェックを修正し、うまくいかない理由を確認 する必要があります。

3.BUがあるレベル、例えば計算されたTPの1/2に達したとき、トレーリングストップ(ロボットの受信パラメータ)を追加完了します(パラメータでBUファクターを指定することも可能です、例えば0.3から0.7まで)。セパレートトレーリングはロボットに記述されていますが(コードはこのフォーラムから引用)、BUを考慮したものではありません。さらに、なぜかStrategy Testerでは動作しないので、その原因を解明する必要があります。

4.お金の管理を 加えたいが、方法がわからない。例えば、アクティブな注文がある場合、一方向に5つ以上の注文を出すことは禁止されています。または、口座の残高/自己資本 を設定する際に、取引を禁止する。

5.マーチンゲール信号のフィルタリング。(オプション)。


以上です。ロボットファイルは、協力の意思があれば、パーソナルに提出する準備ができています。もし、興味のあるトレーダーがいれば、個人的なメッセージでトレーディングロボットのファイルを共有する準備ができています。私自身は完走して、1ポイントだけ残ります。

 

1.は解決しました。iLowest/iHighestでバーヒストリーの価格を読み取る方法がわかりました)過去半年分のヒストリーでは、収益性指標が若干上昇しています)ヒストリー全体では負けています(

2.の点がまだ理解できていない。

私はトレーリングに対処するために始めた、多分私はそれを "ビート "します)収益性は、いくつかの利益があるかもしれないが、価格は単に到達しないと停止時に閉じ、大きな利益を取るとの取引があるため、少し成長する必要があります。

 

2点目について

datetime current, last=0;
int shift=1;

void OnTick()
   {
   current=iTime(symbol,frame,shift);
   //ограничение на торговлю вне начала бара
   if(last==current) return;
   last=current;

   }

3点目について

//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних History баров 
int DoTrailOrder(int ePosition, int eMagicNumber, double eDistance, int eHistory, string eSymbol, int eTimeFrame)
   {
   if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) return(1);
   int eType=OrderType();
   if(eType!=OP_BUY && eType!=OP_SELL) return(0);
   if(OrderMagicNumber()!=eMagicNumber) return(0);
   if(OrderSymbol()!=eSymbol) return(0);
   //наблюдаем начиная с бара следующим за баром открытия
   if(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) return(0);
   int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS);
   double ePoint=MarketInfo(eSymbol,MODE_POINT);
   double eSpread=MarketInfo(eSymbol,MODE_SPREAD);
   double eExtremum;
   if(eType==OP_BUY)
      {
      //стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eHistory
      eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eHistory,1));
      //расстояние от минимума до StopLoss должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance*ePoint) return(0);
      //расстояние от минимума до цены открытия должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance*ePoint) return(0);
      //новый стоп должен быть не ближе к текущей цене, чем на два спреда
      if(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)+eDistance*ePoint-eExtremum,eDigits)<=2*eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrBlue)) return(-1);
      }
   if(eType==OP_SELL)
      {
      //стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eHistory
      eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eHistory,1));
      if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint && OrderStopLoss()!=0) return(0);
      if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint) return(0);
      //один спред между Ask и Bid сократился
      if(NormalizeDouble(eExtremum+eDistance*ePoint-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+(eDistance+eSpread)*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrRed)) return(-1);
      }
   return(0);
   }
 

トレーリングストップは期待値を上げることはできても、収益性を向上させることはできない。ストップがなければもっと利益が出たかもしれないのに、新たに設定したストップが価格に押されてしまうような騒がしい市場では、パフォーマンスが低下してしまうことがあります。

意図的に取引を終了させる方向で考えた方が良い。あなたは、開くための信号を探している、その後、なぜ裁定に閉鎖を投げる?
 

ポイント2,3のヒントありがとうございます。 テストしてみます。

クローズに関しては、もちろん反対側のシグナルが発生したときにクローズすることも可能ですが、より効果を上げるにはどうしたらよいかを考える必要があります。

あるレベルに達したらトレールしたいのですが、ドローダウンが大きいのも困ります。)

しゃい

 

ディミトリ、トレーリングについて - これはすでに多くの人が何度も検証している情報です。上の末尾のコードが一番いいんじゃないでしょうか。しかし、この欠点がないわけではありません。

試してみること、何事もトライすることが大切です。

 
Ivan:

具体的にどこが変わったのでしょうか?

以前、どこかであげたことがある。こちらもどうぞ。

ファイル:
 
Дмитрий Хлыстов:

ポイント2,3のヒントありがとうございます。 テストしてみます。

クローズに関しては、もちろん反対側のシグナルが発生したときにクローズすることも可能ですが、より効果を上げるにはどうしたらよいかを考える必要があります。

あるレベルに達したらトレールしたいのですが、ドローダウンが大きいのも困ります。)

しゃい

相場はポイントで動くものではない、つまりポイント制ではないのです。レベルからレベルへ移動します。距離はトレンドタイムで測るのがよいでしょう。おそらくティック単位ではありますが、ピップ単位ではありません。

理由: