エラー、バグ、質問 - ページ 2452 1...244524462447244824492450245124522453245424552456245724582459...3185 新しいコメント Sergey Dzyublik 2019.05.03 15:39 #24511 A100:配列をコピーするものは、a = b のルールではなく、ArrayCopy( a, b ) のルールで自分で作ったのか、それともどこかに書いてあるのか? 動的配列を持つ構造体の暗黙の代入演算子 であることを忘れないようにしましょう. A100 2019.05.03 15:53 #24512 Sergey Dzyublik:自分たちで考案したのか、どこかに書いてあるのか。 これは,動的配列を持つ構造体に対する暗黙の代入演算 子の働きであることを思い出してほしい.私のアイデアではなく、開発者のアイデアです。 uchar a[], b[]; a = b; //Error: invalid array access なぜエラーになるのですか?構造体にラップしたらエラーが消えた?その理由は?何が根本的に変わったのか?上記の私の回答 Igor Zakharov 2019.05.03 15:55 #24513 Alexey Viktorov:それは、一連の行動や出来事を整理することに他なりません。あなた自身がマニュアルから引用したもので、整合性は保証されないと書いてありますね。だからこそ、リスクがあるのです。 すでにVladimirのアドバイスに従ってコードを書き直し始めていますが、closingがtickより長い場合、つまり再びダブルカウントする場合につまずきました(カウント中のフィルターノードは非常に強引です)。今のところ、最適化速度との妥協のために、全閉前に停止する以上のことは思いつきません。 今日は金曜日です :)少し休んだら、何か考えるかもしれません。 いずれにせよ、アイデアをありがとうございました。 Sergey Dzyublik 2019.05.03 16:27 #24514 A100:私のアイデアではなく、開発者のアイデアです。どこに書いてあるのか理解できなかったが、気にしないことにする...。 チョリバーありがとうございました。 松葉杖でバックアップして、走り出す。 struct MyArray{ uchar data[]; void operator=(MyArray &bytes){ ArrayCopy(this.data, bytes.data); ArrayResize(this.data, ArraySize(bytes.data)); } }; MyArray GetArray(int i){ MyArray arr; if (i%2 == 0){ ArrayResize(arr.data, 8); ArrayInitialize(arr.data, 0x8); }else{ ArrayResize(arr.data, 4); ArrayInitialize(arr.data, 0x4); } return arr; } void OnStart(){ MyArray arr_1 = GetArray(1); ArrayPrint(arr_1.data); // 4 4 4 4 MyArray arr_2 = GetArray(2); ArrayPrint(arr_2.data); // 8 8 8 8 8 8 8 8 arr_2 = arr_1; ArrayPrint(arr_2.data); // 4 4 4 4 } Alexey Viktorov 2019.05.03 17:26 #24515 Igor Zakharov:あなた自身がマニュアルから引用したもので、整合性は保証されないと書いてありますね。だからこそ、リスクがあるのです。 すでにVladimirのアドバイスに従ってコードを書き直し始めていますが、closingが1tickより長い場合、つまり再びダブルカウントする場合につまずきました(カウント中のフィルターノードは非常に強引です)。今のところ、最適化速度との妥協のために、全閉前に停止する以上のことは思いつきません。 今日は金曜日です :)少し休んだら、何か考えるかもしれません。 とにかく、アイデアをありがとうございました。私自身の一貫性の話でした。 私の観察によると、OnTickの後、取引が発生すると、次のtickを待たずにOnTradeTransaction 関数にコード実行が渡されることが判明しました。従って、自社機能による決済処理と OnTradeTransaction による決済処理に差はありません。しかし 、私は OnTradeTransactionで 作業する 方が好きです。サーバーから送られてくるトランザクションの順序に依存することなく、操作の順序を正しく並べることが主なポイントになります。そして 、この順番を正しく 理解することが重要です。繰り返しになりますが、私自身の観察によると、シーケンスはトランザクションの種類で区切ることができます。つまり、TRADE_TRANSACTION_DEAL_ADDが 最初に実行され、次に TRADE_TRANSACTION_HISTORY_ADDが実行されるかもしれませんが、論理的には注文が最初に履歴に加えられ、次にトランザクションが加えられるはず です。 ps; それから、やはりTRADE_TRANSACTION_DEAL_ADD トランザクションをスクリーニングすることで、ポジションオープン、ポジションクローズでスクリーニング することができます。結局、外為市場用のExpert Advisorと口座の話でしょう?そのため、くしゃみのたびにすべての位置を再計算する必要はありません。開いた場合は1つ追加し、閉じた場合はカウントされたものから1つ削除すれば十分です。 Igor Zakharov 2019.05.03 18:10 #24516 Alexey Viktorov:外為市場や口座の、ですね。グリッド :)はい。 現在のロジックは以下の通りです。各グリッドに関するすべての情報を格納する構造体があります:シンボル、ポジション数、カム・ロット・プロフィット、その他いくつかの重要でないもの...。注文がある場合、タイマーで利益を再計算します(マルチシンボル・ロボット)。しかし、ロットと数量はOnTradeTransactionで 再計算されました(ユーザーが "手助け "した場合)。 例えば1つのグリッドが100$の利益で、もう1つが50$の損失である場合、それが拡大しないように50$の利益で両方のグリッドを閉じることを確認したいと思いました。 今のところ、そうしています。 void OnTradeTransaction( const MqlTradeTransaction& trans, // trade transaction structure const MqlTradeRequest& reqst, // request structure const MqlTradeResult& reslt // response structure ) { int index=-1; for(index=0;index<symbols_total;index++) if(ARRAY[index].symbol==trans.symbol) break; //нашли индекс символа по которому прошла трансакция в массиве структур if(index>=0) CountOrders(index); //пересчитали элемент } 今のところ、いくつかのグリッドを閉じた後にCountOrders() を追加しています。ストラテジーテスターとしては、有効です。実際のアカウントでは、Vladimir のスキーム (クローズドチケットの配列) を使用します。 ところで、ペアのクロージングは、それ自体を正当化していない - 利益はきちんとカットしながら、ドローダウンが大幅に減少していません。 削除済み 2019.05.03 18:49 #24517 Vladimir Karputov:ポジションを 閉じる作業のために、ALL while、Sleep、OnTimerをあきらめることになる。私なら次のようにします:クローズ注文を出し、OnTickを終了し、次のティックでチェックします:必要なチケットのあるポジションがまだ生きていれば、再びクローズ注文を出し、OnTickへの入口/出口を循環させるようにします。 ロジックは以下の通りです。ポジションのクローズが最優先されるため、クローズループはOnTickの一番最初にあります。また、クロージングチケットの配列の形成は、OnTickのどの場所でも、たとえ最後であっても可能です。遅かれ早かれ、次のようなことになるでしょう。ポジションを閉じる必要があり、決済注文が送信され(MQL5)、つまり、適切なハンドラで取引行動を追跡していない(またはEAでポジション状態を保存していない)ため、逆のタイプの注文が送信され、次のティックで決済注文が送信中となり、別の注文を送ってしまう可能性があるのです。その結果、逆方向のポジションになる。 Igor Zakharov 2019.05.04 06:51 #24518 Alexey Kozitsyn:遅かれ早かれ、次のようなことになるでしょう。ポジションを決済する必要があり、決済注文(MQL5)を送ります。つまり、対応するハンドラでトレードアクションを追跡しない(またはEAでポジション状態を保存しない)ため、逆のタイプの注文を送り、次のティックで決済注文が送信中であるかもしれませんが、別の注文を送ってしまったということです。その結果、逆方向のポジションになる。そのような場合、私たちは 10036トレード_レトコード_ポジション_クローズド指定された POSITION_IDENTIFIERの位置は すでに閉鎖 されています。 クローズポジションは、クローズするポジションのチケットと一緒に送信されますので、ご記載のようなことは起こりえません。 削除済み 2019.05.04 11:09 #24519 Sergey Dzyublik:どこに書いてあるのか理解できませんでしたが、気にしないでください...。 チョリバーありがとうございました。 松葉杖でバックアップして、走り出す。 まあ、配列がコピーされるのは不思議ですが、それが好きな人もいるくらいですから......。 配列の上に多少なりとも適当なラップを作り、問題はない。 https://www.mql5.com/ru/forum/221917/page26#comment_11233214 Alexey Navoykov 2019.05.04 13:21 #24520 A100:私のアイデアではなく、開発者のアイデアです。そんなことを言われた覚えはない。 代入演算 子は、オブジェクトの同一コピーを作成するのが目的です。 それが目的です。 何かを何かに等化するとき、左側には明らかに完全なコピーが得られるはずです。 だから、ここには明らかにバグがあるのです。 1...244524462447244824492450245124522453245424552456245724582459...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
配列をコピーするものは、a = b のルールではなく、ArrayCopy( a, b ) のルールで
自分で作ったのか、それともどこかに書いてあるのか?
動的配列を持つ構造体の暗黙の代入演算子 であることを忘れないようにしましょう.
自分たちで考案したのか、どこかに書いてあるのか。
これは,動的配列を持つ構造体に対する暗黙の代入演算 子の働きであることを思い出してほしい.
私のアイデアではなく、開発者のアイデアです。
なぜエラーになるのですか?構造体にラップしたらエラーが消えた?その理由は?何が根本的に変わったのか?上記の私の回答それは、一連の行動や出来事を整理することに他なりません。
あなた自身がマニュアルから引用したもので、整合性は保証されないと書いてありますね。だからこそ、リスクがあるのです。
すでにVladimirのアドバイスに従ってコードを書き直し始めていますが、closingがtickより長い場合、つまり再びダブルカウントする場合につまずきました(カウント中のフィルターノードは非常に強引です)。今のところ、最適化速度との妥協のために、全閉前に停止する以上のことは思いつきません。
今日は金曜日です :)少し休んだら、何か考えるかもしれません。
いずれにせよ、アイデアをありがとうございました。
私のアイデアではなく、開発者のアイデアです。
どこに書いてあるのか理解できなかったが、気にしないことにする...。
チョリバーありがとうございました。
松葉杖でバックアップして、走り出す。
あなた自身がマニュアルから引用したもので、整合性は保証されないと書いてありますね。だからこそ、リスクがあるのです。
すでにVladimirのアドバイスに従ってコードを書き直し始めていますが、closingが1tickより長い場合、つまり再びダブルカウントする場合につまずきました(カウント中のフィルターノードは非常に強引です)。今のところ、最適化速度との妥協のために、全閉前に停止する以上のことは思いつきません。
今日は金曜日です :)少し休んだら、何か考えるかもしれません。
とにかく、アイデアをありがとうございました。
私自身の一貫性の話でした。
私の観察によると、OnTickの後、取引が発生すると、次のtickを待たずにOnTradeTransaction 関数にコード実行が渡されることが判明しました。従って、自社機能による決済処理と OnTradeTransaction による決済処理に差はありません。しかし 、私は OnTradeTransactionで 作業する 方が好きです。サーバーから送られてくるトランザクションの順序に依存することなく、操作の順序を正しく並べることが主なポイントになります。そして 、この順番を正しく 理解することが重要です。繰り返しになりますが、私自身の観察によると、シーケンスはトランザクションの種類で区切ることができます。つまり、TRADE_TRANSACTION_DEAL_ADDが 最初に実行され、次に TRADE_TRANSACTION_HISTORY_ADDが実行されるかもしれませんが、論理的には注文が最初に履歴に加えられ、次にトランザクションが加えられるはず です。
ps; それから、やはりTRADE_TRANSACTION_DEAL_ADD トランザクションをスクリーニングすることで、ポジションオープン、ポジションクローズでスクリーニング することができます。結局、外為市場用のExpert Advisorと口座の話でしょう?そのため、くしゃみのたびにすべての位置を再計算する必要はありません。開いた場合は1つ追加し、閉じた場合はカウントされたものから1つ削除すれば十分です。外為市場や口座の、ですね。
グリッド :)はい。
現在のロジックは以下の通りです。各グリッドに関するすべての情報を格納する構造体があります:シンボル、ポジション数、カム・ロット・プロフィット、その他いくつかの重要でないもの...。注文がある場合、タイマーで利益を再計算します(マルチシンボル・ロボット)。しかし、ロットと数量はOnTradeTransactionで 再計算されました(ユーザーが "手助け "した場合)。
例えば1つのグリッドが100$の利益で、もう1つが50$の損失である場合、それが拡大しないように50$の利益で両方のグリッドを閉じることを確認したいと思いました。
今のところ、そうしています。
今のところ、いくつかのグリッドを閉じた後にCountOrders() を追加しています。ストラテジーテスターとしては、有効です。実際のアカウントでは、Vladimir のスキーム (クローズドチケットの配列) を使用します。
ところで、ペアのクロージングは、それ自体を正当化していない - 利益はきちんとカットしながら、ドローダウンが大幅に減少していません。
ポジションを 閉じる作業のために、ALL while、Sleep、OnTimerをあきらめることになる。私なら次のようにします:クローズ注文を出し、OnTickを終了し、次のティックでチェックします:必要なチケットのあるポジションがまだ生きていれば、再びクローズ注文を出し、OnTickへの入口/出口を循環させるようにします。
ロジックは以下の通りです。ポジションのクローズが最優先されるため、クローズループはOnTickの一番最初にあります。また、クロージングチケットの配列の形成は、OnTickのどの場所でも、たとえ最後であっても可能です。
遅かれ早かれ、次のようなことになるでしょう。ポジションを閉じる必要があり、決済注文が送信され(MQL5)、つまり、適切なハンドラで取引行動を追跡していない(またはEAでポジション状態を保存していない)ため、逆のタイプの注文が送信され、次のティックで決済注文が送信中となり、別の注文を送ってしまう可能性があるのです。その結果、逆方向のポジションになる。
遅かれ早かれ、次のようなことになるでしょう。ポジションを決済する必要があり、決済注文(MQL5)を送ります。つまり、対応するハンドラでトレードアクションを追跡しない(またはEAでポジション状態を保存しない)ため、逆のタイプの注文を送り、次のティックで決済注文が送信中であるかもしれませんが、別の注文を送ってしまったということです。その結果、逆方向のポジションになる。
そのような場合、私たちは
10036
トレード_レトコード_ポジション_クローズド
指定された POSITION_IDENTIFIERの位置は すでに閉鎖 されています。
クローズポジションは、クローズするポジションのチケットと一緒に送信されますので、ご記載のようなことは起こりえません。
どこに書いてあるのか理解できませんでしたが、気にしないでください...。
チョリバーありがとうございました。
松葉杖でバックアップして、走り出す。
まあ、配列がコピーされるのは不思議ですが、それが好きな人もいるくらいですから......。
配列の上に多少なりとも適当なラップを作り、問題はない。
https://www.mql5.com/ru/forum/221917/page26#comment_11233214
私のアイデアではなく、開発者のアイデアです。
そんなことを言われた覚えはない。
代入演算 子は、オブジェクトの同一コピーを作成するのが目的です。 それが目的です。 何かを何かに等化するとき、左側には明らかに完全なコピーが得られるはずです。 だから、ここには明らかにバグがあるのです。