初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 983 1...976977978979980981982983984985986987988989990...1503 新しいコメント Nikita Chernyshov 2019.01.21 08:00 #9821 こんにちは、同僚たち。 質問:mql4で、ポジション数を 計算するためには、次のような関数を書けばよいのです。 //+------------------------------------------------------------------+ // Счетчик ордеров //+------------------------------------------------------------------+ int OrderCount(int type) { 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() == type) count++; } } return(count); } mql5ではどのように実装されているのですか?マジコン別、またはタイプ別のポジション数を計算するにはどうすればよいですか? Vladimir Karputov 2019.01.21 08:31 #9822 このトピックに関連しないコメントは、「MQL4 MT4 MetaTrader 4初心者からの質問」に移動しました。 Vladimir Karputov 2019.01.21 08:33 #9823 Nikita Chernyshov:こんにちは、同僚たち。 質問:mql4で、ポジション数を 計算するためには、次のような関数を書けばよいのです。 mql5ではどのように実装されているのですか?マジックナンバーや型式でポジション数を計算するにはどうしたらいいのでしょうか?Ehlers_CG EA コード、関数CalculateAllPositionsでの例。 Nikita Chernyshov 2019.01.21 10:15 #9824 Vladimir Karputov:Ehlers_CG EA コード、関数CalculateAllPositionsでの例。ありがとうございました。よりわかりやすい形に変えてみた。しかし、それは0を返し、無限の注文を開く、私はどこで失敗したのか、アドバイスをお願いします。自分のトレーディングアイデアに注目するのではなく、あくまで一般的に学びたい。 #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\AccountInfo.mqh> #include <Trade\DealInfo.mqh> #include <Trade\OrderInfo.mqh> #include <Expert\Money\MoneyFixedMargin.mqh> CPositionInfo m_position; // trade position object CTrade trade; // trading object CSymbolInfo symbol_info; // symbol info object CAccountInfo m_account; // account info wrapper CDealInfo m_deal; // deals object COrderInfo m_order; // pending orders object CMoneyFixedMargin *m_money; input double lot = 0.01; input int TakeP = 300; input int StopL = 300; input int Magic = 123; input int Slip = 50; input int MA = 50; double ma[]; int handle; int digits; double point; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { handle = iMA(NULL,0,MA,0,MODE_SMA,PRICE_CLOSE); trade.SetExpertMagicNumber(Magic); trade.SetDeviationInPoints(Slip); trade.SetTypeFilling(ORDER_FILLING_FOK); trade.SetAsyncMode(false); digits=(int)SymbolInfoInteger(NULL,SYMBOL_DIGITS); point=SymbolInfoDouble(NULL,SYMBOL_POINT); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { CopyBuffer(handle,0,0,50,ma); ArraySetAsSeries(ma,true); double Ask=SymbolInfoDouble(NULL,SYMBOL_ASK); double Bid=SymbolInfoDouble(NULL,SYMBOL_BID); if(Ask > ma[1] && CalculateAllPositions(POSITION_TYPE_BUY) == 0) { double tp = NormalizeDouble(Ask+TakeP*point,digits); double sl = NormalizeDouble(Ask-StopL*point,digits); if(!trade.Buy(lot,NULL,Ask,sl,tp)) { //--- сообщим о неудаче Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(), ". Описание кода: ",trade.ResultRetcodeDescription()); } else { Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(), " (",trade.ResultRetcodeDescription(),")"); } } if(Bid < ma[1] && CalculateAllPositions(POSITION_TYPE_SELL) == 0) { double tp = NormalizeDouble(Bid-TakeP*point,digits); double sl = NormalizeDouble(Bid+StopL*point,digits); if(!trade.Sell(lot,NULL,Bid,sl,tp)) { //--- сообщим о неудаче Print("Метод Sell() потерпел неудачу. Код возврата=",trade.ResultRetcode(), ". Описание кода: ",trade.ResultRetcodeDescription()); } else { Print("Метод Sell() выполнен успешно. Код возврата=",trade.ResultRetcode(), " (",trade.ResultRetcodeDescription(),")"); } } Comment(CalculateAllPositions(POSITION_TYPE_BUY)); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Счетчик ордеров | //+------------------------------------------------------------------+ int CalculateAllPositions(const ENUM_POSITION_TYPE type) { int count=0; for(int i=PositionsTotal()-1;i>=0;i--) { if(m_position.SelectByIndex(i)) { if(m_position.Symbol()==NULL && m_position.Magic()==Magic && m_position.PositionType()==type) count++; } } return(count); } Vladimir Karputov 2019.01.21 10:17 #9825 Nikita Chernyshov:ありがとうございました。より納得のいく形に変えてみた。しかし、それは0を返し、無限の注文を開く、私はどこで失敗したのか、アドバイスをお願いします。私のトレーディングの考え方に注意を払わないでください。 あなたの間違いのキーワードは、私は無駄に多くの検証コードをEAに書いていない、ということです。ほぼすべての内部構造、特にOnTradeTransactionが 省かれていますね。 Aleksey Vyazmikin 2019.01.22 04:53 #9826 問題が発生しました。インジケータベースのEAは実際の口座では正常に動作しますが、テスターではOHLCによるティック生成モードと すべてのティックによるティック生成モードの両方で、結果は同じです。エラーの結果は、ゼロバーでインジケータのバッファが空になります(インジケータの計算に使用される上位TFに新しいバーがある場合のみ)。しかし、Expert AdvisorにSleepを追加することで、なんとか指標を計算させることができました。 しかし、ティックの生成モードによって、このSleepが異なることがわかりました。すべてのティックからの生成にはSleep(15000)で十分で、OHLCにはSleep(30000)が必要なのです。 というのも、論理的には、ティック生成のモードによって異なる遅延時間がモデル化されているように見えるからです。 開発者の皆さん、インジケータの状況を説明してください。私自身、原因が何なのか理解できません。 インジケータとExpert AdvisorをPMに渡す用意があるが、誰に渡すか教えてくれ。 Ihor Herasko 2019.01.22 05:05 #9827 Aleksey Vyazmikin:ある問題に直面しました。インジケータベースのEAは実際の口座では正常に動作しますが、テスターではOHLCによるティック生成モードと すべてのティックによるティック生成モードの両方で、結果は同じです。エラーの結果は、ゼロバーでインジケータのバッファが空になります(インジケータの計算に使用される上位TFに新しいバーがある場合のみ)。しかし、Sleepを追加して計算するようにしたところ、ティック生成のモードによってこのSleepが異なること、つまり、すべてのティックから生成する場合はSleep(15000)で十分だが、OHLCの場合はSleep(30000)が必要なことが判明したのです。 というのも、論理的には、ティック生成のモードによって異なる遅延時間がモデル化されているように見えるからです。 開発者の皆様、インジケーターの状況を説明してください。私自身、原因が何なのか理解できません。 PMでインジケータとEAを渡す用意があるが、誰に渡すか教えてくれ。このインジケーターでは、スリープは機能しません。しかも、テスターならともかく、Expert Advisorでは無視される。 Aleksey Vyazmikin 2019.01.22 05:07 #9828 Ihor Herasko:インジケーターにスリープが効かない。しかも、テスターならともかく、Expert Advisorでは無視される。SleepはExpert Advisorにあると既に書きましたが、それを無視して100%間違いないのであれば、余計にテスターにエラーがあることを確認することになりますね。遅延は時間的に発生しないかもしれませんが、プログラムに対してエミュレートすることは可能です。 追記: テスターでSleepが 動作することを確認した簡単なコードを掲載します。 Print(iClose(Symbol(),PERIOD_CURRENT,0)); Sleep(15000); Print(iClose(Symbol(),PERIOD_CURRENT,0)); 結果 2019.01.22 08:28:24.661 2019.01.21 23:49:00 66920.0 2019.01.22 08:28:24.661 2019.01.21 23:49:15 66928.0 fxsaber 2019.01.22 05:18 #9829 Ihor Herasko:インジケーターにスリープが効かない。しかも、テスターになるとEAでも無視 される。そうではありません。 Ihor Herasko 2019.01.22 05:42 #9830 Aleksey Vyazmikin:SleepはEAにあると既に書きましたが、それを無視して100%間違いないのであれば、余計にテスターにエラーがあることを確認することになります。遅延は時間的に発生しないかもしれませんが、プログラムに対してエミュレートすることは可能です。追記:テスターでSleepが動作することを確認した簡単なコードを掲載します。結果これはもともと、あなたの投稿にあったものです。 しかし、Sleepを入れることでなんとかインジケータが読めるようになり、ここで判明したのが...。 だから、Sleep in the indicatorに反応したんです。また、EAのSleepについてですが、なぜ4と5で挙動を変える必要があったのかがわかりません。 4では、あのような感じです。void OnTick() { Print("Before: ", TimeCurrent()); Sleep(100000); Print("After: ", TimeCurrent()); } 2019.01.22 07:38:19.432 2018.11.08 00:02:05 Test AUDUSD,M5: After: 2018.11.08 00:02:05 2019.01.22 07:38:19.432 2018.11.08 00:02:05 Test AUDUSD,M5: Before: 2018.11.08 00:02:05 質問の事実についてはスリープは、インジケーターのデータの再計算には影響しないはずです。バッファの充填がおかしい。もしかしたら、再現性のあるコードがあるのでは? 1...976977978979980981982983984985986987988989990...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは、同僚たち。
質問:mql4で、ポジション数を 計算するためには、次のような関数を書けばよいのです。
mql5ではどのように実装されているのですか?マジコン別、またはタイプ別のポジション数を計算するにはどうすればよいですか?
こんにちは、同僚たち。
質問:mql4で、ポジション数を 計算するためには、次のような関数を書けばよいのです。
mql5ではどのように実装されているのですか?マジックナンバーや型式でポジション数を計算するにはどうしたらいいのでしょうか?
Ehlers_CG EA コード、関数CalculateAllPositionsでの例。
Ehlers_CG EA コード、関数CalculateAllPositionsでの例。
ありがとうございました。よりわかりやすい形に変えてみた。しかし、それは0を返し、無限の注文を開く、私はどこで失敗したのか、アドバイスをお願いします。自分のトレーディングアイデアに注目するのではなく、あくまで一般的に学びたい。
ありがとうございました。より納得のいく形に変えてみた。しかし、それは0を返し、無限の注文を開く、私はどこで失敗したのか、アドバイスをお願いします。私のトレーディングの考え方に注意を払わないでください。
あなたの間違いのキーワードは、私は無駄に多くの検証コードをEAに書いていない、ということです。ほぼすべての内部構造、特にOnTradeTransactionが 省かれていますね。
問題が発生しました。インジケータベースのEAは実際の口座では正常に動作しますが、テスターではOHLCによるティック生成モードと すべてのティックによるティック生成モードの両方で、結果は同じです。エラーの結果は、ゼロバーでインジケータのバッファが空になります(インジケータの計算に使用される上位TFに新しいバーがある場合のみ)。しかし、Expert AdvisorにSleepを追加することで、なんとか指標を計算させることができました。 しかし、ティックの生成モードによって、このSleepが異なることがわかりました。すべてのティックからの生成にはSleep(15000)で十分で、OHLCにはSleep(30000)が必要なのです。
というのも、論理的には、ティック生成のモードによって異なる遅延時間がモデル化されているように見えるからです。
開発者の皆さん、インジケータの状況を説明してください。私自身、原因が何なのか理解できません。
インジケータとExpert AdvisorをPMに渡す用意があるが、誰に渡すか教えてくれ。
ある問題に直面しました。インジケータベースのEAは実際の口座では正常に動作しますが、テスターではOHLCによるティック生成モードと すべてのティックによるティック生成モードの両方で、結果は同じです。エラーの結果は、ゼロバーでインジケータのバッファが空になります(インジケータの計算に使用される上位TFに新しいバーがある場合のみ)。しかし、Sleepを追加して計算するようにしたところ、ティック生成のモードによってこのSleepが異なること、つまり、すべてのティックから生成する場合はSleep(15000)で十分だが、OHLCの場合はSleep(30000)が必要なことが判明したのです。
というのも、論理的には、ティック生成のモードによって異なる遅延時間がモデル化されているように見えるからです。
開発者の皆様、インジケーターの状況を説明してください。私自身、原因が何なのか理解できません。
PMでインジケータとEAを渡す用意があるが、誰に渡すか教えてくれ。
このインジケーターでは、スリープは機能しません。しかも、テスターならともかく、Expert Advisorでは無視される。
インジケーターにスリープが効かない。しかも、テスターならともかく、Expert Advisorでは無視される。
SleepはExpert Advisorにあると既に書きましたが、それを無視して100%間違いないのであれば、余計にテスターにエラーがあることを確認することになりますね。
遅延は時間的に発生しないかもしれませんが、プログラムに対してエミュレートすることは可能です。
追記: テスターでSleepが 動作することを確認した簡単なコードを掲載します。
結果
インジケーターにスリープが効かない。しかも、テスターになるとEAでも無視 される。
そうではありません。
SleepはEAにあると既に書きましたが、それを無視して100%間違いないのであれば、余計にテスターにエラーがあることを確認することになります。
遅延は時間的に発生しないかもしれませんが、プログラムに対してエミュレートすることは可能です。
追記:テスターでSleepが動作することを確認した簡単なコードを掲載します。
結果
これはもともと、あなたの投稿にあったものです。
しかし、Sleepを入れることでなんとかインジケータが読めるようになり、ここで判明したのが...。
だから、Sleep in the indicatorに反応したんです。
また、EAのSleepについてですが、なぜ4と5で挙動を変える必要があったのかがわかりません。 4では、あのような感じです。
質問の事実についてはスリープは、インジケーターのデータの再計算には影響しないはずです。バッファの充填がおかしい。もしかしたら、再現性のあるコードがあるのでは?