MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 193 1...186187188189190191192193194195196197198199200...1953 新しいコメント 削除済み 2017.05.05 22:58 #1921 私は助けが必要です - 私はトレーリングストップ - 3つの注文を持っていますが、ビデオチュートリアルのトレーリングの例 :) 唯一のリンクされていない注文のために、私の場合、それらはアルゴリズムによってリンクされている、すなわちtakeprofitは3注文の合計で、または私がトレンドに入った場合は1によって計算されます。同じ量の注文を獲得するようになりましたが、以前のトレーリングなしのEAと比較して、取引回数が2-3倍少なくなっています。だから、私のトレーリングはトレーリングではなく、ナンセンスなものなのです。リンクされた注文にどのように配置すればよいのでしょうか? どなたかアイデアを教えてください。残念ながら、これ以上思いつきません。 以下は、私の「トレール」の結果で、青色で表示されています。1のテスト結果を添付します。そこにトレーリングストップはあるのかないのか?理解できない。なぜ、同期の利益が増えなかったのですか?案件数だけが 2~3倍に減少?//+------------------------------------------------------------------+ //| BLACKJACK&HOOKERS TrailX.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern double Lots = 0.01; extern int TakeProfit = 5; extern int Step = 2; extern int TrailingStep = 3; extern int TrailingStop = 1; extern int MaPeriod = 200; extern int MaShift = 1; extern int Magic = 123; extern int Slippage = 5; int timeprev=0; extern double price,op,cn,tp; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(Digits == 3 || Digits == 5) TakeProfit *= 10; Step *= 10; TrailingStep *= 10; TrailingStop *= 10; Slippage *= 10; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (timeprev == Time[0]) return; timeprev = Time[0]; double maprice=iMA(Symbol(),0,MaPeriod,MaShift,MODE_SMA,PRICE_CLOSE,1); op=CalculateProfit(); cn=CountTrades(); tp=TakeProfit; if(tp>TakeProfit) { TakeProfit+=tp; } if (cn==0 && CountBuy() + CountSell() == 0 && Ask > maprice) { if (OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue)<0) Print("Не удалось открыть ордер на покупку"); } if (cn==0 && CountBuy() + CountSell() == 0 && Bid < maprice) { if (OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red)<0) Print("Не удалось открыть ордер на продажу"); } if(cn==1 && CountBuy()==1)//CountBuy()==1 && { price=FindLastBuyPrice(); if((price-Ask)>=Step*Point) { if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1) Print("Не удалось открыть ордер на продажу"); } } else if(cn==1 && CountSell()==1)//CountSell()==1 && { price=FindLastSellPrice(); if((Bid-price)>=Step*Point) { if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1) Print("Не удалось открыть ордер на покупку"); } } if(cn==2 && CountBuy()==1 && CountSell()==1)//CountBuy() + CountSell()==2 && { price=FindLastSellPrice(); if((price-Bid)>=Step*Point) { if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1) Print("Не удалось открыть ордер на продажу"); } else price=FindLastSellPrice(); if((Bid-price)>=Step*Point) { if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1) Print("Не удалось открыть ордер на покупку"); } } else if(cn==2 && CountSell()==1 && CountBuy()==1)//CountSell() + CountBuy()==2 && { price=FindLastBuyPrice(); if((Ask-price)>=Step*Point) { if(OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue)<1) Print("Не удалось открыть ордер на продажу"); } else price=FindLastBuyPrice(); if((price-Ask)>=Step*Point) { if(OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",Magic,0,Red)<1) Print("Не удалось открыть ордер на покупку"); } } Trailing(); if (op>=tp) { CloseAll(); } } //--------------------------------------------------------------------------------------- // double Equity() //или OrderProfit() - эти идеи в работе и задуманы как автоподбор лота (без мартингейла) для снижения рисков от контрдвижения (интервенций) рынка // { // double eqv=0; // eqv+=AccountEquity(); // return(eqv); // } //--------------------------------------------------------------------------------------- void Trailing() { for (int i=OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { price=FindLastBuyPrice(); if (Bid - price > (TakeProfit+TrailingStep)*Point) { { tp=NormalizeDouble((TakeProfit+TrailingStep)*Point, Digits); } } if (price - (TakeProfit-TrailingStop)*Point < Bid - (TakeProfit+TrailingStep)*Point) { { tp=NormalizeDouble((TakeProfit-TrailingStop)*Point, Digits); } } } if (OrderType() == OP_SELL) { price=FindLastSellPrice(); if (price - Ask > (TakeProfit+TrailingStep)*Point) { { tp=NormalizeDouble((TakeProfit+TrailingStep)*Point, Digits); } } if (price - (TakeProfit-TrailingStop)*Point > Ask + (TakeProfit+TrailingStep)*Point) { { tp=NormalizeDouble((TakeProfit-TrailingStop)*Point, Digits); } } } } } } } //--------------------------------------------------------------------------------------- double CalculateProfit() { double oprofit=0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { oprofit+=OrderProfit(); } } } } return(oprofit); } //-------------------------------------------------------------------------------------- void CloseAll() { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage)) Print("Не удалось закрыть ордер на покупку"); } if(OrderType()==OP_SELL) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage)) Print("Не удалось закрыть ордер на продажу"); } } } } } //--------------------------------------------------------------------------------------------------- double FindLastBuyPrice() { int oldticket,ticket= 0; double oldopenprice = 0; for(int cnt=OrdersTotal()-1; cnt>=0; cnt--) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) { oldticket=OrderTicket(); if(oldticket>ticket) { ticket=oldticket; oldopenprice=OrderOpenPrice(); } } } } return(oldopenprice); } //--------------------------------------------------------------------------------------------------- double FindLastSellPrice() { int oldticket,ticket= 0; double oldopenprice = 0; for(int cnt=OrdersTotal()-1; cnt>=0; cnt--) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL) { oldticket=OrderTicket(); if(oldticket>ticket) { ticket=oldticket; oldopenprice=OrderOpenPrice(); } } } } return(oldopenprice); } //---------------------------------------------------------------------------------------------- int CountBuy() { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY) count++; } } return(count); } //---------------------------------------------------------------------------------------------- int CountSell() { int count=0; for(int trade=OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL) count++; } } return(count); } //+---------------------------------------------------------------------------------+ int CountTrades() { int count=0; for (int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) if(OrderType() == OP_BUY || OrderType() == OP_SELL) count++; } } return(count); } //----------------------------------------------------------------------------------+ int FindLastOrderType() { for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) return(OrderType()); } } return(-1); } //----------------------------------------------------------------------------------+ Автоматический трейдинг и тестирование торговых стратегий www.mql5.com MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций ファイル: EURUSD_deposit_100_7_TrailX.gif 6 kb Vitaly Muzichenko 2017.05.05 23:04 #1922 geratdc:私は助けを必要とする - 私はストップフリップを持っている - 3注文が、私の場合、それらはアルゴリズムによってリンクされている、すなわちtakeprofitは3注文の合計、またはあなたがトレンドにある場合は1によって計算されます関係ない注文のためにのみ末尾の例。同じ量の注文を獲得するようになりましたが、以前のトレーリングなしのEAと比較して、取引回数が2-3倍少なくなっています。だから、私のトレーリングはトレーリングではなく、ナンセンスなものなのです。リンクされた注文にどのように配置すればよいのでしょうか? どなたかアイデアを教えてください。私は何も考えられません。以下は、私の「トレール」の結果です-赤で強調されています。 あなたのコードを落書きとして理解する人がいると思いますか? 削除済み 2017.05.05 23:10 #1923 Vitaly Muzichenko: あなたの走り書きのコードを誰かが理解してくれると思いますか? どのように表示すればよいのでしょうか?まあ、コードの一部を放り込んでおかないと、何が何だかわからなくなりますからね。 Vitaly Muzichenko 2017.05.05 23:28 #1924 geratdc: どのように見せるのか?まあ、コードの一部を放り込んでおかないと、何が何だかわからなくなりますからね。せめてこんな感じで。 削除済み 2017.05.06 08:40 #1925 Vitaly Muzichenko:少なくとも、そういうことです。 誰かがやり直したんだ。確かにその方が良いですね、ありがとうございます。 ivan-baaton 2017.05.06 09:33 #1926 EAを書きましたが、正しく動作しません。私が見たエラーは、注文が時間によって閉じられていないことです。他にもエラーが発生している可能性があります。 以下は、私がExpert Advisorを書いたシステムのルールです:1/ 週の初めに、最初の4時間のローソク足が閉じるのを待ちます。2/ このローソク足の高値から20ピップ上、安値から20ピップ下に買い逆指値注文と売り逆指値注文を保留しています。3/ ストップロスは反対注文のレベルに設定すること。4/ 注文がストップロスと同額の利益に達したとき、ブレイクイーブンに移行します(ポジションのストップロスをその始値に移行します)。5/ 1回目の起動後の2回目の注文は、DO NOT REMOVE!6/ 週の終わりには、損益に関係なく、すべての注文を削除/決済します。ご協力ありがとうございました:) EAコードのファイルを添付します。 ファイル: Lazy_Trader_Expert.mq4 11 kb Alexey Viktorov 2017.05.06 09:48 #1927 ivan-baaton: EAを書きましたが、正しく動作しません。私が見たエラーは、注文が時間によって閉じられていないことです。他にもエラーが発生している可能性があります。 以下は、私がExpert Advisorを書いたシステムのルールです:1/ 週の初めに、最初の4時間のローソク足が閉じるのを待ちます。2/ このローソク足の高値から20ピップ上、安値から20ピップ下に買い逆指値注文と売り逆指値注文を保留しています。3/ ストップロスは反対注文のレベルに設定すること。4/ 注文がストップロスと同額の利益に達したとき、ブレイクイーブンに移行します(ポジションのストップロスをその始値に移行します)。5/ 1回目の起動後の2回目の注文は、DO NOT REMOVE!6/ 週の終わりには、損益に関係なく、すべての注文を削除/決済します。ご協力ありがとうございます:) アドバイザーのコードのファイルを添付します。TimeHour(TimeCurrent()) == DayTimeCloseこのような絶対的な平等は非常に稀なことかもしれませんし、もし23で週を閉じるのであれば、せめて15分でも早く注文を閉じた方が良いでしょう。他のエラーは探しませんでした。一見すると、かなり正確に書かれているように見えます。 ivan-baaton 2017.05.06 10:39 #1928 Alexey Viktorov:このような絶対的な平等は非常に稀で、もし23で週を終えるなら、もう少し早く、少なくとも15分前には注文を終了させた方がよいでしょう。他のエラーは探しませんでした。一見すると、かなりキレイに書かれているように見えます。週の締めは00:00、つまり1時間前に注文を締め切る。このコードのどこが問題なのか:TimeHour(TimeCurrent())== DayTimeClose ?このコードのどこかに間違いがあるのでは?for (int i = OrdersTotal(); i>=0; i--){if (OrderSelect(k, SELECT_BY_POS, MODE_TRADES) == true && TimeHour(TimeCurrent())== DayTimeClose && DayOfWeek() == 5 && (OrderType() == OP_SELL || OrderType() == OP_SELLSTOP) && OrderMagicNumber() == Magic){ticket_sell = OrderClose(ticket_sell, Lots, Bid, 3, Red);if (ticket_sell == false)Print("Sell order not closed");}}ありがとうございました。 Any questions from newcomers コーディングのヘルプ アスク! Alexey Viktorov 2017.05.06 11:48 #1929 ivan-baaton:週の締めは00:00、つまり1時間前に注文を締め切る。このコードのどこが問題なのか:TimeHour(TimeCurrent())== DayTimeClose ?このコードのどこかに間違いがあるのでは?for(int i= OrdersTotal(); i>=0; i--){if (OrderSelect(k, SELECT_BY_POS, MODE_TRADES) == true &&TimeHour(TimeCurrent())== DayTimeClose&& DayOfWeek() == 5 && (OrderType() == OP_SELL || OrderType() == OP_SELLSTOP) && OrderMagicNumber() == Magic){ticket_sell = OrderClose(ticket_sell, Lots, Bid, 3, Red);if (ticket_sell == false)Print("Sell order not closed");}}感謝私が指摘したのはまさにその点です。今となっては不注意だったということですが。TimeHour(TimeCurrent())が強調表示されるだけでした。==DayTimeClose.しかし、ループカウンタが iで、順序kが選択されているということは、すぐにはわかりませんでした。 削除済み 2017.05.06 17:32 #1930 Alexey Viktorov:私が指摘したのはまさにその点です。今となっては不注意だったということですが。ハイライトされたTimeHour(TimeCurrent())のみが表示されました。==DayTimeClose.しかし、ループカウンタが iで、順序kが選択されているということは、すぐにはわかりませんでした。 そうそう、このKも上部ヘッダの外部変数に 書かれているのですが、何かの関数の戻り値なのかもしれませんね・・・。アレクセイ、私の問題について何か言うことはないか?逆指値注文にトレーリングストップを付けるようにしています。このような問題に遭遇したことはありませんか? 1...186187188189190191192193194195196197198199200...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私は助けが必要です - 私はトレーリングストップ - 3つの注文を持っていますが、ビデオチュートリアルのトレーリングの例 :) 唯一のリンクされていない注文のために、私の場合、それらはアルゴリズムによってリンクされている、すなわちtakeprofitは3注文の合計で、または私がトレンドに入った場合は1によって計算されます。同じ量の注文を獲得するようになりましたが、以前のトレーリングなしのEAと比較して、取引回数が2-3倍少なくなっています。だから、私のトレーリングはトレーリングではなく、ナンセンスなものなのです。リンクされた注文にどのように配置すればよいのでしょうか? どなたかアイデアを教えてください。残念ながら、これ以上思いつきません。 以下は、私の「トレール」の結果で、青色で表示されています。
1のテスト結果を添付します。そこにトレーリングストップはあるのかないのか?理解できない。なぜ、同期の利益が増えなかったのですか?案件数だけが 2~3倍に減少?
私は助けを必要とする - 私はストップフリップを持っている - 3注文が、私の場合、それらはアルゴリズムによってリンクされている、すなわちtakeprofitは3注文の合計、またはあなたがトレンドにある場合は1によって計算されます関係ない注文のためにのみ末尾の例。同じ量の注文を獲得するようになりましたが、以前のトレーリングなしのEAと比較して、取引回数が2-3倍少なくなっています。だから、私のトレーリングはトレーリングではなく、ナンセンスなものなのです。リンクされた注文にどのように配置すればよいのでしょうか? どなたかアイデアを教えてください。私は何も考えられません。以下は、私の「トレール」の結果です-赤で強調されています。
あなたの走り書きのコードを誰かが理解してくれると思いますか?
どのように表示すればよいのでしょうか?まあ、コードの一部を放り込んでおかないと、何が何だかわからなくなりますからね。
どのように見せるのか?まあ、コードの一部を放り込んでおかないと、何が何だかわからなくなりますからね。
せめてこんな感じで。
少なくとも、そういうことです。
誰かがやり直したんだ。確かにその方が良いですね、ありがとうございます。
EAを書きましたが、正しく動作しません。私が見たエラーは、注文が時間によって閉じられていないことです。他にもエラーが発生している可能性があります。
以下は、私がExpert Advisorを書いたシステムのルールです:
1/ 週の初めに、最初の4時間のローソク足が閉じるのを待ちます。
2/ このローソク足の高値から20ピップ上、安値から20ピップ下に買い逆指値注文と売り逆指値注文を保留しています。
3/ ストップロスは反対注文のレベルに設定すること。
4/ 注文がストップロスと同額の利益に達したとき、ブレイクイーブンに移行します(ポジションのストップロスをその始値に移行します)。
5/ 1回目の起動後の2回目の注文は、DO NOT REMOVE!
6/ 週の終わりには、損益に関係なく、すべての注文を削除/決済します。
ご協力ありがとうございました:) EAコードのファイルを添付します。
EAを書きましたが、正しく動作しません。私が見たエラーは、注文が時間によって閉じられていないことです。他にもエラーが発生している可能性があります。
以下は、私がExpert Advisorを書いたシステムのルールです:
1/ 週の初めに、最初の4時間のローソク足が閉じるのを待ちます。
2/ このローソク足の高値から20ピップ上、安値から20ピップ下に買い逆指値注文と売り逆指値注文を保留しています。
3/ ストップロスは反対注文のレベルに設定すること。
4/ 注文がストップロスと同額の利益に達したとき、ブレイクイーブンに移行します(ポジションのストップロスをその始値に移行します)。
5/ 1回目の起動後の2回目の注文は、DO NOT REMOVE!
6/ 週の終わりには、損益に関係なく、すべての注文を削除/決済します。
ご協力ありがとうございます:) アドバイザーのコードのファイルを添付します
。
このような絶対的な平等は非常に稀なことかもしれませんし、もし23で週を閉じるのであれば、せめて15分でも早く注文を閉じた方が良いでしょう。他のエラーは探しませんでした。一見すると、かなり正確に書かれているように見えます。
このような絶対的な平等は非常に稀で、もし23で週を終えるなら、もう少し早く、少なくとも15分前には注文を終了させた方がよいでしょう。他のエラーは探しませんでした。一見すると、かなりキレイに書かれているように見えます。
週の締めは00:00、つまり1時間前に注文を締め切る。
このコードのどこが問題なのか:TimeHour(TimeCurrent())== DayTimeClose ?
このコードのどこかに間違いがあるのでは?
}
ありがとうございました。
週の締めは00:00、つまり1時間前に注文を締め切る。
このコードのどこが問題なのか:TimeHour(TimeCurrent())== DayTimeClose ?
このコードのどこかに間違いがあるのでは?
}
感謝
私が指摘したのはまさにその点です。今となっては不注意だったということですが。TimeHour(TimeCurrent())が強調表示されるだけでした。==DayTimeClose.
しかし、ループカウンタが iで、順序kが選択されているということは、すぐにはわかりませんでした。
私が指摘したのはまさにその点です。今となっては不注意だったということですが。ハイライトされたTimeHour(TimeCurrent())のみが表示されました。==DayTimeClose.
しかし、ループカウンタが iで、順序kが選択されているということは、すぐにはわかりませんでした。
そうそう、このKも上部ヘッダの外部変数に 書かれているのですが、何かの関数の戻り値なのかもしれませんね・・・。
アレクセイ、私の問題について何か言うことはないか?逆指値注文にトレーリングストップを付けるようにしています。このような問題に遭遇したことはありませんか?