専門家集団 - ページ 4 1234567891011 新しいコメント Forex Trader 2005.04.19 10:32 #31 Проверьте, пожалуйста, не в этом ли ошибка с попытками повторных установок стопа по той же цене? 3人が見ていた =)) レナートが来て、ただ指をエラーに指していた =))) もちろん今確認しますが、それが問題なのでしょう・・・。bid - TrailingStop * point」を正規化しておらず、まさにこの構造が注文修正に関与しているのですが...。 我々は、気配り、紳士ではない;) そこで、何人かの方から、この問題のバリエーションをご提案いただきました。入札は小数点以下が5桁になる可能性があると書いた私でさえ、そのようなことがありました。最初はあり得ないと思ったのですが、おそらく複数のデータフィードから引用して、何らかのアルゴリズムで平均化するオートマトンによって、引用が行われていることを思い出しました。 MetaQuotes 2005.04.19 12:34 #32 入札は小数点以下が5桁になると書いた私でも最初はあり得ないと思っていました Bid/Askは一義的に標準的な記号の精度を持っています。もうひとつは、1.6666の代わりに1.6665999と表示されることがあります(浮動小数点数の誤差のため)。 このような数値(double型)の比較の問題は、すべての言語に存在し、この種の算術の基本的な精度が限られていることの結果であることに注意したい。そのため、誰かのせいにするのではなく、問題を自覚し、保護されたコードを書くことが必要です。 Forex Trader 2005.04.19 12:44 #33 Даже я писал , что bid может иметь 5 знаков после запятой. Я сначала думал, что такое невозможно Bid/Askは明らかに標準的な文字精度である。もうひとつは、1.6666の代わりに1.6665999と表示されることがあります(浮動小数点演算の特殊性によるものです)。 このような数値(double型)の比較の問題は、すべての言語に存在し、この種の算術の基本的な精度が限られていることの結果であることに注意したい。それに対応して、誰かを責めるのではなく、問題意識を持ち、安全なコードを書くことが必要です。 だから、私は誰も責めてはいないんです。私は無意味にkomposterを尋ねたわけではありません - どの通貨のトレーリングが正しく動作しなかったか。MT3では、確かに円は小数点以下3桁まで表示された記憶があります。少なくとも、私は何度も見たことがあります。 Forex Trader 2005.04.19 19:31 #34 3人が見ていた =) Renatが来て、ただエラーに指を指していた =)))<br/ translate="no"> 今、もちろん確認しますが、最も可能性が高いのはこのケースです......。bid - TrailingStop * point」を正規化しておらず、まさにこの構造が注文の変更に関与している...。 私たちは気配り上手ではありません。) normalization didn't help =( より正確には - trailing errors (euro - buy position): 03:41 12:07 12:11 14:31 14:33 14:36 14:39 14:44 14:46 14:47 14:48 (server time) Forex Trader 2005.04.19 19:45 #35 すみません、標準のNormalizeDoubleのことです。 レナート、どうすればいいんだ? 現時点では3つのオプションがあります。 1. if ( orderstoploss < ( bid - TrailingStop *point))) を if ( TrailingStop < ( bid -orderstoploss ) / point ) に置き換える 2. Begun 関数を使って double ではなく int を比較 3. Stop advance ( 毎ポイントではなく n スプレッド後 ) とそれらの組み合わせは勿論。 かなり責任のあるソフトなので、おすすめの書き方を教えて欲しいです(!保証ではありません!)。 Forex Trader 2005.04.19 20:00 #36 <br / translate="no">正規化してもダメだった =( 代わりにやってみてください。 if (orderstoploss < ( bid - TrailingStop * point )) を書きます。 double newSL = NormalizeDouble(bid - TrailingStop * Point); if (orderstoploss + Point < newSL) orderstoploss = newSL;//OrderModify(... newSL...) エラーも出るのでしょうか? Forex Trader 2005.04.19 21:51 #37 まあ、" +Point"の場合は分かりませんが......実は私も今、同じことをやっています......。 バックラッシュを起こせるのは確かですが、本気ではないので...。そして、もし私が10-20pipsのバックラッシュをしなければならないとしたら、「信頼性のために」、そう、M30では、ただのおとぎ話です =)。 MetaQuotes 2005.04.19 23:55 #38 レナート とにかくどうやって進めればいいのか? コードを再度確認し、簡略化し、デバッグメッセージを挿入してください。 Forex Trader 2005.04.20 01:53 #39 コードを再度確認し、簡略化し、デバッグメッセージを挿入してください。 正直なところ、どう単純化すればいいのかわからない...。 でも、もちろん確認はできますよ。以下は、現在使われているコードです(部分的に): 受信パラメータをチェックし、必要な順序を選択します。エラーが発生した場合は、単に終了します。つまり、注文は変更されません。int _TrailingStop ( int _OrderTicket, int TrailingStop, color _Color = CLR_NONE ) { // Print( "_TrailingStop ( ", _OrderTicket, ", ", TrailingStop, " ) - loaded..." ); if ( TrailingStop <= 0 ) { // Print( "_TrailingStop ( ", _OrderTicket, ", ", TrailingStop, " ) - return(0);" ); return(0); } if ( OrderSelect( _OrderTicket, SELECT_BY_TICKET ) == false ) { // Print( "_TrailingStop ( ", _OrderTicket, ", ", TrailingStop, " ) - return(-2);" ); return(-2); } すべての注文データを変数に保存し、正規化する。 string _Symbol = OrderSymbol(); int _OrderType = OrderType(); double point = MarketInfo ( _Symbol, MODE_POINT ); int digits = MarketInfo( _Symbol, MODE_DIGITS ); double bid = NormalizeDouble( MarketInfo ( _Symbol, MODE_BID ), digits ); double ask = NormalizeDouble( MarketInfo ( _Symbol, MODE_ASK ), digits ); double orderopenprice = NormalizeDouble ( OrderOpenPrice(), digits ); double orderstoploss = NormalizeDouble ( OrderStopLoss(), digits ); double ordertakeprofit = NormalizeDouble ( OrderTakeProfit(), digits ); datetime orderexpiration = OrderExpiration(); double NewStopLoss; これが原木の色と「きれいさ」です。 string _OrderType_str = _OrderType_str ( _OrderType ); if ( _Color <= 0 ) { _Color = ordersellcolor; if ( _OrderType == OP_BUY || _OrderType == OP_BUYLIMIT || _OrderType == OP_BUYSTOP ) { _Color = orderbuycolor; } } 今、ロングポジションのために、新しいSLレベルを定義し、それを正規化し、古いものと比較します(ポジションが有益である場合のみ)。 if ( _OrderType == OP_BUY ) { NewStopLoss = NormalizeDouble( bid - TrailingStop * point, digits ); if ( ( bid - orderopenprice ) > 0 ) { if ( orderstoploss <= 0 || orderstoploss < NewStopLoss )//TrailingStop < ( bid - orderstoploss ) / point ) { ログに書き込む _info1 ( "Trailing Stop (" + TrailingStop + " points) для позиции № " + _OrderTicket + ", " + _OrderType_str + "..." ); _info2 ( "New Stop Loss = " + DoubleToStr( NewStopLoss, digits ) ); _info3 ( "" ); _info4 ( "" ); 10秒間の休止の後、3回の注文変更を試みる(注文はその都度ハイライトされる) for ( int x = 0; x < 3; x ++ ) { while ( LocalTime() - GlobalVariableGet ( "LastTradeTime" ) < 10 ) { Sleep(1000); } if ( OrderSelect( _OrderTicket, SELECT_BY_TICKET ) == false ) { // Print( "_TrailingStop ( ", _OrderTicket, ", ", TrailingStop, " ) - return(-2);" ); return(-2); } int ordermodify = OrderModify( _OrderTicket, orderopenprice, NewStopLoss, ordertakeprofit, orderexpiration, _Color ); ordermodify <= 0 の場合のみエラーコードが 送信されます。 if ( ordermodify > 0 ) { _info3 ( "Успешно..." ); GlobalVariableSet ( "LastTradeTime", LocalTime() ); // Print( "_TrailingStop ( ", _OrderTicket, ", ", TrailingStop, " ) - return(1);" ); return(1); } int error_code = GetLastError(); _info1 ( "Ошибка Trailing Stop!!!", 1 ); Processing_Error ( error_code ); Sleep(10000); } 3回試行した後、注文が変更されていなければ、終了する (-1)// Print( "_TrailingStop ( ", _OrderTicket, ", ", TrailingStop, " ) - return(-1);" ); return(-1); } } } なら、売りポジションも同じ if ( _OrderType == OP_SELL ) { } そして最後にstopを変更する必要がなければexit(0)//Print( "_TrailingStop ( ", _OrderTicket, ", ", TrailingStop, " ) - return(0);" ); return(0); } わからなくもない Forex Trader 2005.04.20 11:56 #40 <br / translate="no">当然、バックラッシュを起こす可能性はありますが、深刻なものではありません...。そして、10-20pipsのバックラッシュをしなければならない場合、「信頼性のために」、M30ではい、ただのおとぎ話 =)。 これと何の関係があるのですか?"+Point" は、価格の有効数字下一桁を丸める問題を解決します。2、3、そして10~20pips程度では話にならない。 1234567891011 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
3人が見ていた =)) レナートが来て、ただ指をエラーに指していた =)))
もちろん今確認しますが、それが問題なのでしょう・・・。bid - TrailingStop * point」を正規化しておらず、まさにこの構造が注文修正に関与しているのですが...。
我々は、気配り、紳士ではない;)
そこで、何人かの方から、この問題のバリエーションをご提案いただきました。入札は小数点以下が5桁になる可能性があると書いた私でさえ、そのようなことがありました。最初はあり得ないと思ったのですが、おそらく複数のデータフィードから引用して、何らかのアルゴリズムで平均化するオートマトンによって、引用が行われていることを思い出しました。
Bid/Askは一義的に標準的な記号の精度を持っています。もうひとつは、1.6666の代わりに1.6665999と表示されることがあります(浮動小数点数の誤差のため)。
このような数値(double型)の比較の問題は、すべての言語に存在し、この種の算術の基本的な精度が限られていることの結果であることに注意したい。そのため、誰かのせいにするのではなく、問題を自覚し、保護されたコードを書くことが必要です。
Bid/Askは明らかに標準的な文字精度である。もうひとつは、1.6666の代わりに1.6665999と表示されることがあります(浮動小数点演算の特殊性によるものです)。
このような数値(double型)の比較の問題は、すべての言語に存在し、この種の算術の基本的な精度が限られていることの結果であることに注意したい。それに対応して、誰かを責めるのではなく、問題意識を持ち、安全なコードを書くことが必要です。
だから、私は誰も責めてはいないんです。私は無意味にkomposterを尋ねたわけではありません - どの通貨のトレーリングが正しく動作しなかったか。MT3では、確かに円は小数点以下3桁まで表示された記憶があります。少なくとも、私は何度も見たことがあります。
私たちは気配り上手ではありません。)
normalization didn't help =( より正確には - trailing errors (euro - buy position): 03:41 12:07 12:11 14:31 14:33 14:36 14:39 14:44 14:46 14:47 14:48
(server time)
レナート、どうすればいいんだ?
現時点では3つのオプションがあります。
1. if ( orderstoploss < ( bid - TrailingStop *point))) を if ( TrailingStop < ( bid -orderstoploss ) / point ) に置き換える
2. Begun 関数を使って double ではなく int を比較
3. Stop advance ( 毎ポイントではなく n スプレッド後 )
とそれらの組み合わせは勿論。
かなり責任のあるソフトなので、おすすめの書き方を教えて欲しいです(!保証ではありません!)。
代わりにやってみてください。
を書きます。
エラーも出るのでしょうか?
バックラッシュを起こせるのは確かですが、本気ではないので...。そして、もし私が10-20pipsのバックラッシュをしなければならないとしたら、「信頼性のために」、そう、M30では、ただのおとぎ話です =)。
コードを再度確認し、簡略化し、デバッグメッセージを挿入してください。
正直なところ、どう単純化すればいいのかわからない...。
でも、もちろん確認はできますよ。以下は、現在使われているコードです(部分的に):
受信パラメータをチェックし、必要な順序を選択します。エラーが発生した場合は、単に終了します。つまり、注文は変更されません。
すべての注文データを変数に保存し、正規化する。
これが原木の色と「きれいさ」です。
今、ロングポジションのために、新しいSLレベルを定義し、それを正規化し、古いものと比較します(ポジションが有益である場合のみ)。
ログに書き込む
10秒間の休止の後、3回の注文変更を試みる(注文はその都度ハイライトされる)
ordermodify <= 0 の場合のみエラーコードが 送信されます。
3回試行した後、注文が変更されていなければ、終了する (-1)
なら、売りポジションも同じ
そして最後にstopを変更する必要がなければexit(0)
わからなくもない
これと何の関係があるのですか?"+Point" は、価格の有効数字下一桁を丸める問題を解決します。2、3、そして10~20pips程度では話にならない。