グリッドメーカー 1.1 - ページ 3

 
こんにちは。

ご回答ありがとうございます。
 
このコードはグリッドを完璧に保つのに問題があることがわかりました(少なくとも、ブレイクアウトグリッドではなくプルバックとして実行した場合)。 穴が開いて更新されないのを見たことがあるし、10個の注文でグリッドが完全に形成されないのを見たことがある。 また、更新時間の設定が非常に短いと嫌われるようで、その理由がよくわかりません。 グリッドの更新に15分というのは長すぎるようで、(むしろ15秒!)これは大きな問題です。 このような経験をされた方がいらっしゃいましたら、教えていただければと思います。 しかし、これを実現させたのは素晴らしい仕事です。 いい仕事してますね。
 
somaです。

あなたの言うとおり、バグがあり、誰かが私に指摘し、修正されたようです。また、間隔を1分に変更しましたが、15分から30分の方が良いと思います。そうすれば、相場が本当に速く動くときに、いくつかのカウンタートレードを避けることができます。

よろしくお願いします。

//+--------------------------------------------------------------+ //| MakeGrid.mq4 | //| Copyright © 2005, hdb | //| http://www.dubois1.net/hdb | //+----------------------------------------------------------+ #property copyright "Copyright © 2005, hdb" #property link "http://www.dubois1.net/hdb" //#property version "1.4beta" extern string GridName = "Grid"; // グリッドを識別。複数のグリッドを共存させることができる extern double Lots = 0.1; // extern double GridSize = 6; // 注文間のpips - グリッドまたはメッシュサイズ extern double GridSteps = 12; // 注文する合計数 extern double TakeProfit = 6 ; // 利益確定するティックの数。通常のグリッドではストップロスを使用しない extern double UpdateInterval = 1; // 注文をx分ごとに更新 extern bool wantLongs = true; // ロングポジションを希望するか extern bool wantShorts = true; // ショートポジションを希望するか extern bool wantBreakout = true; // 価格より上にロング、下にショートをするか extern bool wantCounter = true; // 価格より下にロング、上にショートをするか extern bool limitEMA34 = false;      // extern double LastUpdate = 0; // 最終更新時刻を記録するためのカウンター extern double GridMaxOpen = 0; // オープンポジションの最大数 //+----------------------------------------------------------------+ //|エキスパート初期化関数 | //+-------------------------------------------------------- int init() { //---- #property show_inputs //パラメータを表示 - Slawaに感謝します。..    
 if ( TakeProfit <= 0 ) // { TakeProfit = GridSize; } //---- return(0); } //+------------------------------------------------------------------------+ //| atRateの領域にオープンポジションまたはオーダーがあるかどうかをテストする | //| checkLongsがtrueならロングをチェックし、さもなければショートをチェックする | //+----------------------------------------+ bool IsPosition(double atRate, double inRange, bool checkLongs ) { int totalorders = OrdersTotal().Bool checkLongs = double atRate; } //+----------------------------------------------------- /// } //+--------------------------------------------- // /// /// } //+----------------------------- /// /// /// // // /// else
     for(int j=0;j<totalorders;j++) // すべての注文とポジションをスキャンします。... { OrderSelect(j, SELECT_BY_POS); if ( OrderSymbol()==Symbol() && OrderComment() == GridName )  // mygridとシンボルだけを探す... { int type = OrderType(); if (MathAbs( OrderOpenPrice() - atRate ) < inRange) // 正確な価格を探すのではなく、価格の近さ(グリッドサイズより小さい)を探す { if ( checkLongs && ( type == OP_BUY || type == OP_BUYLIMIT || type == OP_BUYSTOP ) ) ).  ||(!checkLongs && ( type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP ) ) ) { return(true); } } } 

   return(false); } //+------------------------------------------------------------------------+ //| スクリプトプログラム開始関数 | //+--------------------------------------------------------+ int start() { //---- int i, j,k, ticket, entermode, totalorders; bool doit; double point, startrate, traderate; //---- if (MathAbs(CurTime()-LastUpdate)> UpdateInterval*60) // 最初に呼ばれた時と UpdateInterval 分毎に更新します { LastUpdate = CurTime().LastUpdate; // UpdateInterval 分毎に更新します { LastUpdate = CurTime()-LastUpdate*60) // // UpdateInterval 分後に更新します { LastUpdate = CurTime().LastUpdate; // UpdateInterval 分後に更新します
   Print("Updating"); point = MarketInfo(Symbol(),MODE_POINT); startrate = ( Ask + point*GridSize/2 ) / point / GridSize; // GridSizeで割り切れるティックの数に丸める k = startrate ; k = k * GridSize ; startrate = k * point - GridSize*GridSteps/2*point ;          // 最低エントリーポイントを計算 double EMA34=iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0); for( i=0;i<GridSteps;i++) { traderate = startrate + i*point*GridSize; if ( wantLongs &&( !リミットEMA34 || traderate=i*point*GridSize; if ( wantLongs &&( !リミットEMA34 || traderate=i*point*GridSize; if (!limitEMA34 || traderate > EMA34)) { if ( IsPosition(traderate,point*GridSize,true) == false )           // 価格に近い未決済注文がないかをテスト:もしあれば、1つ付ける { double myStopLoss = 0; if ( StopLoss > 0 ) { myStopLoss = traderate-point*StopLoss ; } if ( traderate > Ask ) { entermode = OP_BUYSTOP; } }. 
              但し、この場合、entermode = OP_BUYLIMIT ; }。 
              
              if ((traderate > Ask ) && (wantBreakout))| ((取引レート <= Ask ) && (wantCounter)) ) 

              { ticket=OrderSend(Symbol(),Entermode,Lots,traderate,0,myStopLoss,traderate+point*TakeProfit,GridName,16384,0,Green); } } if ( wantShorts && (!limitEMA34 || traderate < EMA34)) { if (IsPosition(traderate,point*GridSize,false)== false )           // 価格に近い未決済注文がないかをテスト:もしあれば、1つ付ける { myStopLoss = 0; if ( StopLoss > 0 ) { myStopLoss = traderate+point*StopLoss ; } if ( traderate > Bid ) { entermode = OP_SELLLIMIT; } }. 
              但し、entermode = OP_SELLSTOP ; }. 
              
              if ((取引レート < ビッド) && (wantBreakout))| ((取引レート >= Bid ) && (wantCounter)) ) 
                { ticket=OrderSend(Symbol(),Entermode,Lots,traderate,0,myStopLoss,traderate-point*TakeProfit,GridName,16384,0,Red); } } return(0); } } //+------------------------------------------------------------------------+.
 
hdbさん、ありがとうございます。 しかし、私は、あまりに早く更新することが悪いという理由を見出せないので、あなたがグリッドについてどのように考えているか、正確に理解していないのかもしれません。 エントリーを欠落させると、グリッドの能力を十分に発揮できません。 私は手動で実行するとき、何かが変更された瞬間に注文を更新します。 私はブレイクアウトのグリッドではなく、プルバックのグリッドを実行しているので、おそらくその違いがあるのでしょう。
 
ソーマ

そうですね、そうかもしれませんね。でも、テストが必要ですね。

ということです。
 
最近、グリッドの調子が悪いので、更新のタイミングを待っていました。
前回の更新の翌週、私は休暇中で、グリッドは停止していました。先週は、グリッドはほとんど動いていました。
証拠金がゼロになったときに何度かスイッチを切り、ほとんどのメジャー銘柄で「ロングのみ」を設定した。
今日は超逆転の一日でした。

残高:93(10日前より+10)
使用した証拠金 : +15k
利用可能な証拠金 : +28k
Unreal. P&L : -49k (10日前より-11)
残高 : 44k

ネットは10日前より1k悪化し、開始時の残高より5k減少しています。

この中で本当に難しいのは、ドローダウンを抑えようとすることです。どうにかして、この方法を見つけなければならない。
 
ドローダウンを回避する唯一の方法は、裁量を使うことだと思います。
つまり、いつ注文を追加するのをやめるか、いつショートポジションを追加するのをやめるかを知っておくことです。

ロットサイズを大きくしすぎて、多くのポジションを決済せざるを得なくなり、ひどい状態でスタートした後、10万円の残高でスタートしました。

残高: 97 594.19 約2週間前の残高 83k
フリーマージン: 6 016.88
フローティングP/L: -38 960.45 は -56k と同じくらい悪い。
マージン: 52 616.86

ここ数日は本当に低調で、マージンレベルも93%と低水準でした。

しかし、今、すべてのメジャー銘柄が、当分の間、好転したようだ。
証拠金水準は130%程度まで回復しています。
 
しかし、私はemaとmacdに 基づいたいくつかの自動化されたバリエーションをテストしています...私はあまりにも楽観的ではありませんが。

友人もストップロス付きのものを持っているのですが、なかなかうまくいきません。ドローダウンの問題は本当に解決されるんだけどね。

その間に、私は自分のポジションを整理しました。強いマイナス金利の持ち越しと、かなり損失の大きいポジション(数100ピップス)はすべて閉じました。

それで、私のグリッドはもう一回頭を殴られる(証拠金が430%になる)覚悟ができたんだ!
 
昨日は、数週間にわたる破滅的な取引の後、グリッドが+5kのグリーン(自己資本は54k、49kでスタート)になりました。

デモ 口座で試せるのはラッキーですね。

今、私は「合理的な」ポジションに戻ったので、すべての通貨ペアを次のように設定しました。
1) ポジティブなキャリー・インタレストの方向にのみトレードする (インタレストが0に近い場合を除き、その時は両方行う)
2) 34EMAより上ではロングのみ、34EMAより下ではショートのみ。
3) 2ウェイ通貨では、5分足チャートのmacdを使ってロングかショートかを決める。

これでどんな結果が出るか楽しみです

ps.バックテストがうまくいくといいんだけどなー。
 
こんにちは、hdbです。

私はEURUSDであなたのアドバイザーを利用し、ブレイクアウトとして両建てをしました。

今、私はあなたがすでに次の問題に実行されている場合、あなたにお聞きしたいと思います。

しばらくすると、同じグリッドポジションのいくつかに複数の注文が出ます。2つの場合もありますが、5つ以上ある場合もあります。

私が理解する限り、1つのグリッドポジションで一度に開くのは1つだけであるべきです。

MQL2では、double値を比較する際に同様の問題を発見したため、比較する前にすべてのdouble値をintに変換するよういじくりまわしています。

同じようなことがありましたか?

よろしくお願いします。

cori