グリッドメーカー 1.1 - ページ 3 123456 新しいコメント Forex Trader 2005.07.07 19:18 #21 こんにちは。 ご回答ありがとうございます。 Forex Trader 2005.07.07 21:38 #22 このコードはグリッドを完璧に保つのに問題があることがわかりました(少なくとも、ブレイクアウトグリッドではなくプルバックとして実行した場合)。 穴が開いて更新されないのを見たことがあるし、10個の注文でグリッドが完全に形成されないのを見たことがある。 また、更新時間の設定が非常に短いと嫌われるようで、その理由がよくわかりません。 グリッドの更新に15分というのは長すぎるようで、(むしろ15秒!)これは大きな問題です。 このような経験をされた方がいらっしゃいましたら、教えていただければと思います。 しかし、これを実現させたのは素晴らしい仕事です。 いい仕事してますね。 Forex Trader 2005.07.07 22:41 #23 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); } } //+------------------------------------------------------------------------+. Help: How to write Grid maker 1.1 コーディングの方法は? Forex Trader 2005.07.08 16:34 #24 hdbさん、ありがとうございます。 しかし、私は、あまりに早く更新することが悪いという理由を見出せないので、あなたがグリッドについてどのように考えているか、正確に理解していないのかもしれません。 エントリーを欠落させると、グリッドの能力を十分に発揮できません。 私は手動で実行するとき、何かが変更された瞬間に注文を更新します。 私はブレイクアウトのグリッドではなく、プルバックのグリッドを実行しているので、おそらくその違いがあるのでしょう。 Forex Trader 2005.07.08 19:51 #25 ソーマ そうですね、そうかもしれませんね。でも、テストが必要ですね。 ということです。 Forex Trader 2005.07.11 20:31 #26 最近、グリッドの調子が悪いので、更新のタイミングを待っていました。 前回の更新の翌週、私は休暇中で、グリッドは停止していました。先週は、グリッドはほとんど動いていました。 証拠金がゼロになったときに何度かスイッチを切り、ほとんどのメジャー銘柄で「ロングのみ」を設定した。 今日は超逆転の一日でした。 残高:93(10日前より+10) 使用した証拠金 : +15k 利用可能な証拠金 : +28k Unreal. P&L : -49k (10日前より-11) 残高 : 44k ネットは10日前より1k悪化し、開始時の残高より5k減少しています。 この中で本当に難しいのは、ドローダウンを抑えようとすることです。どうにかして、この方法を見つけなければならない。 Forex Trader 2005.07.12 11:05 #27 ドローダウンを回避する唯一の方法は、裁量を使うことだと思います。 つまり、いつ注文を追加するのをやめるか、いつショートポジションを追加するのをやめるかを知っておくことです。 ロットサイズを大きくしすぎて、多くのポジションを決済せざるを得なくなり、ひどい状態でスタートした後、10万円の残高でスタートしました。 残高: 97 594.19 約2週間前の残高 83k フリーマージン: 6 016.88 フローティングP/L: -38 960.45 は -56k と同じくらい悪い。 マージン: 52 616.86 ここ数日は本当に低調で、マージンレベルも93%と低水準でした。 しかし、今、すべてのメジャー銘柄が、当分の間、好転したようだ。 証拠金水準は130%程度まで回復しています。 Forex Trader 2005.07.12 13:20 #28 しかし、私はemaとmacdに 基づいたいくつかの自動化されたバリエーションをテストしています...私はあまりにも楽観的ではありませんが。 友人もストップロス付きのものを持っているのですが、なかなかうまくいきません。ドローダウンの問題は本当に解決されるんだけどね。 その間に、私は自分のポジションを整理しました。強いマイナス金利の持ち越しと、かなり損失の大きいポジション(数100ピップス)はすべて閉じました。 それで、私のグリッドはもう一回頭を殴られる(証拠金が430%になる)覚悟ができたんだ! Forex Trader 2005.07.13 13:43 #29 昨日は、数週間にわたる破滅的な取引の後、グリッドが+5kのグリーン(自己資本は54k、49kでスタート)になりました。 デモ 口座で試せるのはラッキーですね。 今、私は「合理的な」ポジションに戻ったので、すべての通貨ペアを次のように設定しました。 1) ポジティブなキャリー・インタレストの方向にのみトレードする (インタレストが0に近い場合を除き、その時は両方行う) 2) 34EMAより上ではロングのみ、34EMAより下ではショートのみ。 3) 2ウェイ通貨では、5分足チャートのmacdを使ってロングかショートかを決める。 これでどんな結果が出るか楽しみです ps.バックテストがうまくいくといいんだけどなー。 Forex Trader 2005.07.18 11:28 #30 こんにちは、hdbです。 私はEURUSDであなたのアドバイザーを利用し、ブレイクアウトとして両建てをしました。 今、私はあなたがすでに次の問題に実行されている場合、あなたにお聞きしたいと思います。 しばらくすると、同じグリッドポジションのいくつかに複数の注文が出ます。2つの場合もありますが、5つ以上ある場合もあります。 私が理解する限り、1つのグリッドポジションで一度に開くのは1つだけであるべきです。 MQL2では、double値を比較する際に同様の問題を発見したため、比較する前にすべてのdouble値をintに変換するよういじくりまわしています。 同じようなことがありましたか? よろしくお願いします。 cori 123456 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ご回答ありがとうございます。
あなたの言うとおり、バグがあり、誰かが私に指摘し、修正されたようです。また、間隔を1分に変更しましたが、15分から30分の方が良いと思います。そうすれば、相場が本当に速く動くときに、いくつかのカウンタートレードを避けることができます。
よろしくお願いします。
そうですね、そうかもしれませんね。でも、テストが必要ですね。
ということです。
前回の更新の翌週、私は休暇中で、グリッドは停止していました。先週は、グリッドはほとんど動いていました。
証拠金がゼロになったときに何度かスイッチを切り、ほとんどのメジャー銘柄で「ロングのみ」を設定した。
今日は超逆転の一日でした。
残高: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%程度まで回復しています。
友人もストップロス付きのものを持っているのですが、なかなかうまくいきません。ドローダウンの問題は本当に解決されるんだけどね。
その間に、私は自分のポジションを整理しました。強いマイナス金利の持ち越しと、かなり損失の大きいポジション(数100ピップス)はすべて閉じました。
それで、私のグリッドはもう一回頭を殴られる(証拠金が430%になる)覚悟ができたんだ!
デモ 口座で試せるのはラッキーですね。
今、私は「合理的な」ポジションに戻ったので、すべての通貨ペアを次のように設定しました。
1) ポジティブなキャリー・インタレストの方向にのみトレードする (インタレストが0に近い場合を除き、その時は両方行う)
2) 34EMAより上ではロングのみ、34EMAより下ではショートのみ。
3) 2ウェイ通貨では、5分足チャートのmacdを使ってロングかショートかを決める。
これでどんな結果が出るか楽しみです
ps.バックテストがうまくいくといいんだけどなー。
私はEURUSDであなたのアドバイザーを利用し、ブレイクアウトとして両建てをしました。
今、私はあなたがすでに次の問題に実行されている場合、あなたにお聞きしたいと思います。
しばらくすると、同じグリッドポジションのいくつかに複数の注文が出ます。2つの場合もありますが、5つ以上ある場合もあります。
私が理解する限り、1つのグリッドポジションで一度に開くのは1つだけであるべきです。
MQL2では、double値を比較する際に同様の問題を発見したため、比較する前にすべてのdouble値をintに変換するよういじくりまわしています。
同じようなことがありましたか?
よろしくお願いします。
cori