初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1116 1...110911101111111211131114111511161117111811191120112111221123...1503 新しいコメント Grigori.S.B 2019.08.24 07:54 #11151 Artyom Trishkin: また、このバーでまだポジションが開設 されていない場合は、どのように確認するのですか? Aleksey Vazhmikinの関数を少し修正して、このように新しいバーでポジションを開くことを制御する構造を追加する必要があるかもしれません。 struct open_bar { bool IsPositionOpened; // Flag int bn; // Bar Number datetime bot; // Bar Open Time double bop; // Bar Open Price }; open_bar BarOpen; //+------------------------------------------------------------------------------------------------------------------+ //| Возвращает TRUE, если появился новый бар на текущем ТФ //+------------------------------------------------------------------------------------------------------------------+ bool isNewBar() { datetime tm[]; static datetime prevBarTime=0; if(CopyTime(_Symbol,0,0,1,tm)<0) { Print("%s CopyTime error = %d",__FUNCTION__,GetLastError()); } else { if(prevBarTime!=tm[0]) { prevBarTime=tm[0]; BarOpen.IsPositionOpened=false; BarOpen.bn++; BarOpen.bot=iTime(NULL,PERIOD_CURRENT,0); BarOpen.bop=iOpen(NULL,PERIOD_CURRENT,0); return true; } return false; } return true; } そして、ポジションが正常にオープンされたときにExpert Advisorのコントロールフラグを上げる。 BarOpen.IsPositionOpened=true; そして、別のポジションを開く前にコントロールする。より信頼性が高いのでしょうか? fxsaber 2019.08.24 20:59 #11152 Grigori.S.B: 2つ目のポジションは1つ目のポジションの直後に開き、同じ秒数で、刻みは1つずつ異なる。 https://www.mql5.com/en/forum/271445 https://www.mql5.com/en/forum/308940 Grigori.S.B 2019.08.25 06:49 #11153 fxsaber: https://www.mql5.com/en/forum/271445 https://www.mql5.com/en/forum/308940 いつもありがとうございます。私はすべてを詳細に研究しました。取引要求のたびに5秒の遅延を設定していますが、まだ役に立ちません。ICMarketsのデモ用MT5ヘッジだけの問題です。チェックを追加し、ステータスポーリングの結果を出力する予定です。同じサーバーに接続しても、自分では再現できず、クライアントには定期的に問題が発生するため、状況は悪化しています。 Олег Юдин 2019.08.25 21:12 #11154 こんにちは、皆さん。シンフェロポリの人はいないの? Vladimir Karputov 2019.08.26 04:07 #11155 Олег Юдин: 皆さん、こんにちは。シンフェロポリの人はいないの? これで何とかMQL5の勉強ができると思っているわけですね :) .ここはMQL5プログラミングのフォーラムであり、交際クラブではありません。 Олег Юдин 2019.08.26 06:21 #11156 Vladimir Karputov: これで何とかMQL5の学習に役立てようと思っているわけですね :) .ここはMQL5プログラミングのフォーラムであり、交際クラブではありません。 私自身は、mql5のプログラミングをよく理解しています。完璧ではありませんが、悪くはありません。 BlackTomcat 2019.08.29 17:31 #11157 Grigori.S.B: いつもありがとうございます。私はすべてを詳細に研究しました。取引要求のたびに5秒の遅延を設けていますが、それでもダメです。ICMarketsのデモ用MT5ヘッジだけの問題です。チェックを追加し、ステータスポーリングの結果を出力する予定です。同じサーバーに接続しても、自分では再現できず、クライアントには定期的に問題が発生するため、状況は悪化しています。 pingが高いなど、クライアントの接続品質が関係しているのだと思います。5秒の遅延はありますが、あなたのコードから理解できるように、それがないだけです。m_tradeクラスは何を返すのですか?チケット番号?あるいは真偽は?このオブジェクトが返す結果をチェックするのですが、サーバーとの接続が遅れたために、まだ肯定的な応答が得られていないと想像してください。 if文の実行結果はどうなるのでしょうか?おそらくfalseとなり、5秒後に2回目のループが繰り返されることになります。そして最後にようやくサーバーから返事が来るが、すでに2回目の繰り返しが始まっており、同様のポジションを開くための2回目のリクエストが送られることになる。 注文開始時刻に 多少のデルタがあることは、両注文がチャート上でずれていることで、異なる時刻と価格で約定していることがわかります。 Konstantin Nikitin 2019.08.29 18:04 #11158 Grigori.S.B: 自分では再現できないのに、お客様では同じサーバーに接続しているにもかかわらず、定期的に問題が発生するため、状況が悪化しています。 バーでチェック、シンボルごとに1ポジション。ほとんどの場合、問題を取り除くことができます。 fxsaber 2019.08.29 18:13 #11159 Konstantin Nikitin: バーでチェック、シンボルごとに1ポジション。きっと、問題が解消されるはずです。 そこには、もうひとつのヒケツがある。このような場合、松葉杖を思いつくより、MT4スタイルに書き換えた方が簡単です。 MrBrooklin 2019.08.31 05:59 #11160 皆さん、ごきげんよう。 Metatrader5用のスクリプトコードの一部を紹介します。 #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //---- показывать входные параметры #property script_show_inputs //--- #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object //+------------------------------------------------------------------+ //| Enum Stop or Limit | //+------------------------------------------------------------------+ enum ENUM_STOP_OR_LIMIT { stop=0, // Buy stop and Sell stop limit=1 // Buy limit and Sell limit }; //--- input parameters input ushort InpUpGap = 15; // Gap for pending orders UP from the current price (in points) input ushort InpUpStep = 30; // Step between orders UP (in points) input ushort InpDownGap = 15; // Gap for pending orders DOWN from the current price (in points) input ushort InpDownStep = 30; // Step between orders DOWN (in points) input ENUM_STOP_OR_LIMIT InpPending = stop; // Type of pending orders input uchar InpUpQuantity = 1; // UP quantity orders input uchar InpDownQuantity = 1; // DOWN quantity orders input double InpLots = 0.01; // Lots input ushort InpStopLoss = 50; // Stop Loss (in points) input ushort InpTakeProfit = 50; // Take Profit (in points) //--- ulong m_slippage=30; // slippage double ExtUpGap=0.0; double ExtUpStep=0.0; double ExtDownGap=0.0; double ExtDownStep=0.0; double ExtStopLoss=0.0; double ExtTakeProfit=0.0; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- if(InpLots<=0.0) { Print("The \"Lots\" can't be smaller or equal to zero"); return; } //--- if(!m_symbol.Name(Symbol())) // sets symbol name return; if(!RefreshRates()) return; string err_text=""; if(!CheckVolumeValue(InpLots,err_text)) { Print(err_text); return; } //--- if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK)) m_trade.SetTypeFilling(ORDER_FILLING_FOK); else if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC)) m_trade.SetTypeFilling(ORDER_FILLING_IOC); else m_trade.SetTypeFilling(ORDER_FILLING_RETURN); //--- m_trade.SetDeviationInPoints(m_slippage); m_trade.SetAsyncMode(true); //--- ExtUpGap = m_symbol.Point() * InpUpGap; ExtUpStep = m_symbol.Point() * InpUpStep; ExtDownGap = m_symbol.Point() * InpDownGap; ExtDownStep = m_symbol.Point() * InpDownStep; ExtStopLoss = m_symbol.Point() * InpStopLoss; ExtTakeProfit = m_symbol.Point() * InpTakeProfit; //--- start work double start_price_ask=m_symbol.Ask()-ExtUpGap; double start_price_bid=m_symbol.Bid()+ExtDownGap; //--- set pending orders for(int i=0; i<InpUpQuantity; i++) { double price_ask = start_price_ask+i*ExtUpStep; double price_bid = start_price_bid+i*ExtUpStep; if(InpPending==stop) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyStop(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellLimit(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } for(int i=0; i<InpDownQuantity; i++) { double price_ask = start_price_ask-i*ExtDownStep; double price_bid = start_price_bid-i*ExtDownStep; if(InpPending==limit) { double sl = (ExtStopLoss==0.0) ? 0.0 : price_ask - ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_ask + ExtTakeProfit; m_trade.BuyLimit(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } else { double sl = (ExtStopLoss==0.0) ? 0.0 : price_bid + ExtStopLoss; double tp = (ExtTakeProfit==0.0) ? 0.0 : price_bid - ExtTakeProfit; m_trade.SellStop(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(), m_symbol.NormalizePrice(sl), m_symbol.NormalizePrice(tp)); } } } という疑問が湧いてきました。 1.このスクリプトは、アスクとビッドから一定の距離にある保留中の指値注文、またはストップ注文を設定することになっています。 指値注文は 問題なく設定されるが、逆指値注文は設定されない。保留中の買い逆指値注文と売り逆指値注文が設定されない原因について教えてください。 2.マーケットが閉じている時(週末など)にスクリプトをテストすることは可能でしょうか? 敬具 ウラジミール 1...110911101111111211131114111511161117111811191120112111221123...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
また、このバーでまだポジションが開設 されていない場合は、どのように確認するのですか?
Aleksey Vazhmikinの関数を少し修正して、このように新しいバーでポジションを開くことを制御する構造を追加する必要があるかもしれません。
そして、ポジションが正常にオープンされたときにExpert Advisorのコントロールフラグを上げる。
BarOpen.IsPositionOpened=true;
そして、別のポジションを開く前にコントロールする。より信頼性が高いのでしょうか?
2つ目のポジションは1つ目のポジションの直後に開き、同じ秒数で、刻みは1つずつ異なる。
https://www.mql5.com/en/forum/271445
https://www.mql5.com/en/forum/308940
https://www.mql5.com/en/forum/271445
https://www.mql5.com/en/forum/308940
いつもありがとうございます。私はすべてを詳細に研究しました。取引要求のたびに5秒の遅延を設定していますが、まだ役に立ちません。ICMarketsのデモ用MT5ヘッジだけの問題です。チェックを追加し、ステータスポーリングの結果を出力する予定です。同じサーバーに接続しても、自分では再現できず、クライアントには定期的に問題が発生するため、状況は悪化しています。
皆さん、こんにちは。シンフェロポリの人はいないの?
これで何とかMQL5の勉強ができると思っているわけですね :) .ここはMQL5プログラミングのフォーラムであり、交際クラブではありません。
これで何とかMQL5の学習に役立てようと思っているわけですね :) .ここはMQL5プログラミングのフォーラムであり、交際クラブではありません。
いつもありがとうございます。私はすべてを詳細に研究しました。取引要求のたびに5秒の遅延を設けていますが、それでもダメです。ICMarketsのデモ用MT5ヘッジだけの問題です。チェックを追加し、ステータスポーリングの結果を出力する予定です。同じサーバーに接続しても、自分では再現できず、クライアントには定期的に問題が発生するため、状況は悪化しています。
pingが高いなど、クライアントの接続品質が関係しているのだと思います。5秒の遅延はありますが、あなたのコードから理解できるように、それがないだけです。m_tradeクラスは何を返すのですか?チケット番号?あるいは真偽は?このオブジェクトが返す結果をチェックするのですが、サーバーとの接続が遅れたために、まだ肯定的な応答が得られていないと想像してください。 if文の実行結果はどうなるのでしょうか?おそらくfalseとなり、5秒後に2回目のループが繰り返されることになります。そして最後にようやくサーバーから返事が来るが、すでに2回目の繰り返しが始まっており、同様のポジションを開くための2回目のリクエストが送られることになる。 注文開始時刻に 多少のデルタがあることは、両注文がチャート上でずれていることで、異なる時刻と価格で約定していることがわかります。
自分では再現できないのに、お客様では同じサーバーに接続しているにもかかわらず、定期的に問題が発生するため、状況が悪化しています。
バーでチェック、シンボルごとに1ポジション。ほとんどの場合、問題を取り除くことができます。
バーでチェック、シンボルごとに1ポジション。きっと、問題が解消されるはずです。
そこには、もうひとつのヒケツがある。このような場合、松葉杖を思いつくより、MT4スタイルに書き換えた方が簡単です。
皆さん、ごきげんよう。
Metatrader5用のスクリプトコードの一部を紹介します。
という疑問が湧いてきました。
1.このスクリプトは、アスクとビッドから一定の距離にある保留中の指値注文、またはストップ注文を設定することになっています。 指値注文は 問題なく設定されるが、逆指値注文は設定されない。保留中の買い逆指値注文と売り逆指値注文が設定されない原因について教えてください。
2.マーケットが閉じている時(週末など)にスクリプトをテストすることは可能でしょうか?
敬具 ウラジミール