2つのポジションを独立して制御するトロールプロからアドバイスが欲しいのですが、どのように実装すればよいでしょうか? - ページ 6 123456789 新しいコメント Aleksey 2011.10.31 14:56 #51 charony: そんな感じです。 ただ、トロールの発動基準には興味がない 各オープンポジションを他と区別して処理するトロールが必要です このトレイルは、プラスになっているポジションのみ探索を開始し、マイナスになっているポジションではストップを移動させません。 "両方のポジションに50pipsのトロールを設定することが可能です。 が、同時に閉じることはない。 両ポジションとも50pipsのトローリング" 両方がプラスになった場合のみクローズし、一方がプラス、他方がマイナスになった場合は、プラスの方のみストップが動きます。 削除済み 2011.10.31 14:58 #52 PozitiF: 全ページを読んだわけではありませんが、大筋は理解できたと思います。 https://www.mql5.com/ru/articles/1390 ここで、注文で配列を作り、注文を作るときにどこかからマジックを取る。例えばEAの入力パラメータにマジック=1と書いておけば、次のオープンオーダーで1ずつ値を増やしていくことができる。 端末がクラッシュしても、アレイを復元することができます。 私が書いた前のページでMagicがパラメータとして受け取るtrull。 配列が違うんです、intとdoubleを同じ配列に入れちゃダメなんです。 Aleksey 2011.10.31 15:02 #53 charony: 配列がおかしい、intとdoubleを同じ配列に入れるのはダメだ。 ドットの前に整数を置くだけなので、可能です。 削除済み 2011.10.31 15:36 #54 PozitiF: ドットの前に整数を置くだけなので、可能です。 二重価格 EUR/USD 1.3915 int 1 で。 int sell = 1, in double sell = 1.0 そして、プログラムが動作しない理由を探してみてください。 とか、最悪「コリャマージン」おじさんがやってきたりして。 Aleksey 2011.10.31 15:42 #55 そして、なぜintに価格を入れるかというと、そんなことはまったく書いていないんです。 int型の数値をdouble型の変数に入れると書きました。 をdoubleからintに戻すと、すべて再び動作するようになります)https://www.mql5.com/ru/forum/136406 削除済み 2011.10.31 16:05 #56 int MN=TimeCurrent(); を入れて、OrderSend(Symbol(),OP_BUY,Lots_New,Ask,2,0,NULL,MN,0,Green)としました。 註:各オーダーにはマジックが割り当てられています。 選択後のトロールで int Tip=OrderType(); if(OrderSymbol()!=Symbol()||Tip>1)continue。 if(OrderMagicNumber()==MN) これから挑戦してみようと思います。 削除済み 2011.10.31 16:17 #57 そんなことはない、何か他の問題があるに違いない、今はトロールの話をしているんだ。 探してみます。 削除済み 2011.10.31 16:28 #58 PozitiF: それに、なぜ価格をintにするのか、私はそんなことは一切書いていないし、提案もしていない。 int型の数値をdouble型の変数に入れると書きました。 をdoubleからintに戻すと、すべてうまくいく)https://www.mql5.com/ru/forum/136406 二重価格 EUR/USD 1.3915 を int 1 に、そして再び double に 戻すと 1.0 になります。 二重価格 EUR/USD 1,3915 ==========> 二重 1.0 どこで笑う? int 1------> double 1.0 ------> int 1 ここでも多分動くと思うが、カッコ悪い。 Aleksey 2011.10.31 16:56 #59 charony: そんなことはない、何か他の問題があるに違いない、今はトロールの話をしているんだ。 探してみます。 Trallは100%動作しており、私のほぼすべてのEAで動作しています。 int Trall = 50; int MN= TimeCurrent(); OrderSend(Symbol(),OP_BUY,Lots_New,Ask,2,0,0,NULL,MN,0,Green); int Tip=OrderType(); if(OrderSymbol()!=Symbol()||Tip>1)continue; for(int i = 0; i<OrderTotals(); i++){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true){ if(OrderMagicNumber()==MN) TrailingStop(Trall, 5, MN); } } トロールするはずです。 削除済み 2011.10.31 19:15 #60 //+-----------------------------trailingstop----------------------------------------------+ total=OrdersTotal(); for(int n=0;n<total;n++) { if(OrderSelect(n, SELECT_BY_POS, MODE_TRADES) == true) { int Tip=OrderType(); if(OrderSymbol()==Symbol()&&OrderType()==Tip) { MN = OrderMagicNumber(); TrailingStop(level_ts, level_step , MN); } } } return; // exit start() } //+-----------------------------start end----------------------------------------------+ void TrailingStop(int level_ts,int level_step , int MN) { int ot, err, quantity_orders, cx; bool fm; double op, as, bd, pt, sl, tp, ut; //---- quantity_orders = OrdersTotal(); if(quantity_orders >= 0) { for(cx = 0; cx < quantity_orders; cx++) { if(!OrderSelect(cx, SELECT_BY_POS, MODE_TRADES)) { Print("Error: SimpleTrailing(), OrderSelect: " + cx + ". Îøèáêà: " + GetLastError()); } if (OrderMagicNumber()==MN ) { pt = MarketInfo(OrderSymbol(), MODE_POINT); bd = MarketInfo(OrderSymbol(), MODE_BID); as = MarketInfo(OrderSymbol(), MODE_ASK); op = OrderOpenPrice(); ot = OrderType(); sl = OrderStopLoss(); tp = OrderTakeProfit(); ut = level_ts + level_step; if(ot == OP_BUY) { if(sl == 0 || sl < op) { if(op < (bd - ut * pt)) { sl = bd - level_ts * pt; } } else { if(sl < (bd - ut * pt) && bd > (op + ut * pt)) { sl = bd - level_ts * pt; } } } if(ot == OP_SELL) { if(sl == 0 || sl > op) { if(op > (as + ut * pt)) { sl = as + level_ts * pt; } } else { if(sl > (as + ut * pt) && as < (op - ut * pt)) { sl = as + level_ts * pt; } } } if (sl != OrderStopLoss()) { op = NormalizeDouble(op, Digits); tp = NormalizeDouble(tp, Digits); sl = NormalizeDouble(sl, Digits); fm = OrderModify(OrderTicket(), op, sl, tp, 0, CLR_NONE); } } } } } //+-----------------------------trailingstop end----------------------------------------------+ コードを挿入 したら、トロールが動作するようになりました。 が、問題は解決しない。 123456789 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そんな感じです。
ただ、トロールの発動基準には興味がない
各オープンポジションを他と区別して処理するトロールが必要です
このトレイルは、プラスになっているポジションのみ探索を開始し、マイナスになっているポジションではストップを移動させません。
"両方のポジションに50pipsのトロールを設定することが可能です。
が、同時に閉じることはない。
両ポジションとも50pipsのトローリング"
両方がプラスになった場合のみクローズし、一方がプラス、他方がマイナスになった場合は、プラスの方のみストップが動きます。
全ページを読んだわけではありませんが、大筋は理解できたと思います。
https://www.mql5.com/ru/articles/1390 ここで、注文で配列を作り、注文を作るときにどこかからマジックを取る。例えばEAの入力パラメータにマジック=1と書いておけば、次のオープンオーダーで1ずつ値を増やしていくことができる。
端末がクラッシュしても、アレイを復元することができます。
私が書いた前のページでMagicがパラメータとして受け取るtrull。
配列が違うんです、intとdoubleを同じ配列に入れちゃダメなんです。
配列がおかしい、intとdoubleを同じ配列に入れるのはダメだ。
ドットの前に整数を置くだけなので、可能です。
二重価格 EUR/USD 1.3915 int 1 で。
int sell = 1, in double sell = 1.0
そして、プログラムが動作しない理由を探してみてください。
とか、最悪「コリャマージン」おじさんがやってきたりして。
そして、なぜintに価格を入れるかというと、そんなことはまったく書いていないんです。
int型の数値をdouble型の変数に入れると書きました。
をdoubleからintに戻すと、すべて再び動作するようになります)https://www.mql5.com/ru/forum/136406
int MN=TimeCurrent(); を入れて、OrderSend(Symbol(),OP_BUY,Lots_New,Ask,2,0,NULL,MN,0,Green)としました。
註:各オーダーにはマジックが割り当てられています。
選択後のトロールで
int Tip=OrderType();
if(OrderSymbol()!=Symbol()||Tip>1)continue。
if(OrderMagicNumber()==MN)
これから挑戦してみようと思います。
そんなことはない、何か他の問題があるに違いない、今はトロールの話をしているんだ。
探してみます。
それに、なぜ価格をintにするのか、私はそんなことは一切書いていないし、提案もしていない。
int型の数値をdouble型の変数に入れると書きました。
をdoubleからintに戻すと、すべてうまくいく)https://www.mql5.com/ru/forum/136406
二重価格 EUR/USD 1.3915 を int 1 に、そして再び double に 戻すと 1.0 になります。
二重価格 EUR/USD 1,3915 ==========> 二重 1.0
どこで笑う?
int 1------> double 1.0 ------> int 1 ここでも多分動くと思うが、カッコ悪い。
そんなことはない、何か他の問題があるに違いない、今はトロールの話をしているんだ。
探してみます。
Trallは100%動作しており、私のほぼすべてのEAで動作しています。
トロールするはずです。
コードを挿入 したら、トロールが動作するようになりました。
が、問題は解決しない。