どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 66 1...596061626364656667686970717273...1178 新しいコメント Mepkypuu 2013.08.05 23:45 #651 Roger: トレーリングと呼ばれるものは実際にはそうではなく、異なる方法で計算され、その動作は非論理的であることがあります。 言葉の概念が一致していなくても、私のことを理解してくれているのですね? 問題を解決したのは、ここだった。 double getLots(double newSL) { int opnTime = 0; // время открытия трейда для цикла пересчета позиций double lotSum = 0; for (int i = 0; i <= OrdersTotal()-1; i++) { OrderSelect(i, SELECT_BY_POS); if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { opnTime = OrderOpenTime(); if (OrderType() == OP_BUY) { lotSum += OrderLots() * (newSL - OrderOpenPrice()) / Point; } if (OrderType() == OP_SELL) { lotSum -= OrderLots() * (newSL - OrderOpenPrice()) / Point; } } } return(lotSum); } この関数では、すべてのオープントレードを考慮していなかったので、ループの条件を変更する必要がありました。今はこんな感じです。 double AcountProfitEx(double Price) { double ProfitSum = 0; for (int i = OrdersTotal()-1; i >= 0; i--) { OrderSelect(i, SELECT_BY_POS); if(OrderType() == OP_BUY) ProfitSum -= (OrderOpenPrice() - Price) * OrderLots() / Point; if(OrderType() == OP_SELL) ProfitSum += (OrderOpenPrice() - Price) * OrderLots() / Point; } return (ProfitSum); } この機能は、指定された価格水準でのすべての未決済取引の利益の合計を計算します。ただし、スプレッドを考慮していないという意見も引用されており、私も同意見です。この意見の筆者は、この解決策を提案した。 double getLots(double newSL) { double TickValue, delta; double lotSum; string SymbolName; SymbolName = Symbol(); TickValue = MarketInfo( SymbolName, MODE_TICKVALUE) / Point; delta = ( newSL - Bid ) * TickValue; lotSum = 0.0; for (int i = 0; i <= OrdersTotal()-1; i++) { OrderSelect(i, SELECT_BY_POS); if ( OrderSymbol() == SymbolName ) { if (OrderType() == OP_BUY) { lotSum += OrderProfit() + OrderLots() * delta; } if (OrderType() == OP_SELL) { lotSum += OrderProfit() - OrderLots() * delta; } } } return(lotSum); } しかし、正直に告白すると、私は彼が書いているように理解できないのです。 スプレッドが計上されていない。これは、現在の価格から結果をカウントすることで修正することができます。 彼が提案したアルゴリズムがよくわからないのですが、スプレッドはどのように考慮されているのでしょうか?どなたか解説してください。 Mislaid 2013.08.06 00:35 #652 Mepkypuu:でも、正直なところ、書いている彼のことはよくわからないんです。 私は彼のアルゴリズムを理解していないようだ、どのようにスプレッドがそこで考慮されるのですか?どなたか説明してください。 OrderProfit() は、現在のAskでのショートポジションをカウントし、ここで現在のスプレッドの値が考慮されます。スプレッドが変化しない場合、価格が現在のBidからnewSLに変化すると、ポジションの1ロットの利益(BuyまたはSellのいずれか、適切な符号付き)は、オペレータに書かれているdeltaの値だけ変化します。 delta = ( newSL - Bid ) * TickValue; 簡単に説明すると、OrderProfit()はスプレッドも含めてすべてをカウントし、ある瞬間(現在の価格)の結果をOrderProfit()で確定させるのです。これからは、価格の変化を見守るだけでいいのです。 Mepkypuu 2013.08.06 02:53 #653 Mislaid:OrderProfit()は、現在のAskのショートポジションについてカウントされ、ここで現在のスプレッド値が考慮されます。スプレッドが変化しない場合、価格が現在のBidからnewSLに変化すると、ポジションの1ロットの利益(BuyまたはSellのいずれか、対応する記号)は、文中に書かれているdeltaの値だけ変化します。 delta = ( newSL - Bid ) * TickValue;簡単に説明すると、OrderProfit()はスプレッドも含めてすべてをカウントし、ある瞬間(現在の価格)の結果をOrderProfit()で確定させるのです。ここからは、価格の推移を見守るしかない。わかってきたような気もしますが、もしかしたらもっと正しいのかもしれません。 if (OrderType() == OP_BUY) { lotSum += OrderProfit() + OrderLots() * ((newSL - Bid) / Point * MarketInfo( SymbolName, MODE_TICKVALUE)); } if (OrderType() == OP_SELL) { lotSum += OrderProfit() - OrderLots() * ((newSL - Ask) / Point * MarketInfo( SymbolName, MODE_TICKVALUE)); } ショートポジションのOrderProfitは、Ask価格から計算されますよね? ちなみに、EURUSDの場合、MarketInfo( SymbolName, MODE_TICKVALUE)は 329.02を返すので、この関数が正しく 動作しないのですが、どうすればよいでしょうか? Mepkypuu 2013.08.06 05:23 #654 今のところ、トリック、つまりMarketInfo(SymbolName, MODE_TICKVALUE) でカウントを変えて 行くことにしています。double GetTickValue(string CurrentQuote) { string AccountCurr = AccountCurrency(); string BaseCurr = StringSubstr(CurrentQuote,0,3); string CurrentCurr = StringSubstr(CurrentQuote,3,3); if (CurrentCurr == AccountCurr) return (MarketInfo(CurrentQuote, MODE_LOTSIZE) * MarketInfo(CurrentQuote, MODE_TICKSIZE)); if (BaseCurr == AccountCurr) return (MarketInfo(CurrentQuote, MODE_LOTSIZE) * MarketInfo(CurrentQuote, MODE_TICKSIZE) / MarketInfo(CurrentQuote, MODE_BID)); if ((CurrentCurr != AccountCurr) && (BaseCurr != AccountCurr)) return (MarketInfo(CurrentQuote, MODE_LOTSIZE) * MarketInfo(CurrentQuote, MODE_TICKSIZE) * MarketInfo(StringConcatenate(BaseCurr,AccountCurr), MODE_BID) / MarketInfo(CurrentQuote, MODE_BID)); } Mislaid 2013.08.06 07:10 #655 Mepkypuu: 今のところ、トリック、つまりMarketInfo(SymbolName, MODE_TICKVALUE) でカウントを変えて 行くことにしています。 その書き方は正しい。スプレッドはそのままに、Bidをどれだけずらすか、Askをどれだけずらすか。 Mikhail Kozhemyako 2013.08.06 07:25 #656 Mislaid: その書き方は正しい。Bidが動いた分だけ、Askが動いた分だけ、スプレッドが変わらなければ。 個人的な経験では、スプレッドは通常、変化せず、かなり強いです)。急激な動きの中で、5桁の スプレッドで8ポイントから80ポイントまで広がったこともあります。 Александр 2013.08.07 04:22 #657 ダブルトップの コーディングは可能ですか? Alekseu Fedotov 2013.08.07 08:07 #658 001: ダブルトップは符号化できるのか? 可能です。 Alexey Semenov 2013.08.07 13:40 #659 ジャーナルでExpert Advisorをテスト すると、エラーがポップアップ表示される 2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: エラー 4002 (配列インデックス - 範囲外) 2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: 買い注文を出そうとしています。答えを待っている。 従って、この注文は開封されません。エラーをなくすには?その理由は何でしょうか? 喜んでお手伝いさせていただきます。 Any rookie question, so Making money on forex PREDICT time period Mepkypuu 2013.08.07 13:59 #660 alexey1979621: EAをテストすると、ログにエラーが表示される 2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: エラー 4002 (配列インデックス - 範囲外) 2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: 買い注文を出そうとしています。答えを待っている。 従って、この注文は開封されません。エラーをなくすには?その理由は何でしょうか? 喜んでお手伝いさせていただきます。 ターミナルのメッセージだけではあまりわからないでしょう、EAコードを掲載しないとあまり参考になりません。配列のどこかに、存在しないデータのバッチを、仮定の一つとして書いているのですが、推測は私のプロファイルではありません。 1...596061626364656667686970717273...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
トレーリングと呼ばれるものは実際にはそうではなく、異なる方法で計算され、その動作は非論理的であることがあります。
言葉の概念が一致していなくても、私のことを理解してくれているのですね?
問題を解決したのは、ここだった。
この関数では、すべてのオープントレードを考慮していなかったので、ループの条件を変更する必要がありました。今はこんな感じです。
この機能は、指定された価格水準でのすべての未決済取引の利益の合計を計算します。ただし、スプレッドを考慮していないという意見も引用されており、私も同意見です。この意見の筆者は、この解決策を提案した。
しかし、正直に告白すると、私は彼が書いているように理解できないのです。
でも、正直なところ、書いている彼のことはよくわからないんです。
私は彼のアルゴリズムを理解していないようだ、どのようにスプレッドがそこで考慮されるのですか?どなたか説明してください。OrderProfit() は、現在のAskでのショートポジションをカウントし、ここで現在のスプレッドの値が考慮されます。スプレッドが変化しない場合、価格が現在のBidからnewSLに変化すると、ポジションの1ロットの利益(BuyまたはSellのいずれか、適切な符号付き)は、オペレータに書かれているdeltaの値だけ変化します。
delta = ( newSL - Bid ) * TickValue;
簡単に説明すると、OrderProfit()はスプレッドも含めてすべてをカウントし、ある瞬間(現在の価格)の結果をOrderProfit()で確定させるのです。これからは、価格の変化を見守るだけでいいのです。
OrderProfit()は、現在のAskのショートポジションについてカウントされ、ここで現在のスプレッド値が考慮されます。スプレッドが変化しない場合、価格が現在のBidからnewSLに変化すると、ポジションの1ロットの利益(BuyまたはSellのいずれか、対応する記号)は、文中に書かれているdeltaの値だけ変化します。
delta = ( newSL - Bid ) * TickValue;
簡単に説明すると、OrderProfit()はスプレッドも含めてすべてをカウントし、ある瞬間(現在の価格)の結果をOrderProfit()で確定させるのです。ここからは、価格の推移を見守るしかない。
わかってきたような気もしますが、もしかしたらもっと正しいのかもしれません。
ショートポジションのOrderProfitは、Ask価格から計算されますよね?
ちなみに、EURUSDの場合、MarketInfo( SymbolName, MODE_TICKVALUE)は 329.02を返すので、この関数が正しく 動作しないのですが、どうすればよいでしょうか?
今のところ、トリック、つまりMarketInfo(SymbolName, MODE_TICKVALUE) でカウントを変えて 行くことにしています。
今のところ、トリック、つまりMarketInfo(SymbolName, MODE_TICKVALUE) でカウントを変えて 行くことにしています。
その書き方は正しい。Bidが動いた分だけ、Askが動いた分だけ、スプレッドが変わらなければ。
個人的な経験では、スプレッドは通常、変化せず、かなり強いです)。急激な動きの中で、5桁の スプレッドで8ポイントから80ポイントまで広がったこともあります。
ダブルトップは符号化できるのか?
ジャーナルでExpert Advisorをテスト すると、エラーがポップアップ表示される
2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: エラー 4002 (配列インデックス - 範囲外)
2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: 買い注文を出そうとしています。答えを待っている。
従って、この注文は開封されません。エラーをなくすには?その理由は何でしょうか?
喜んでお手伝いさせていただきます。
EAをテストすると、ログにエラーが表示される
2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: エラー 4002 (配列インデックス - 範囲外)
2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: 買い注文を出そうとしています。答えを待っている。
従って、この注文は開封されません。エラーをなくすには?その理由は何でしょうか?
喜んでお手伝いさせていただきます。