1. Объявляем bool[64].
2. bool[0] равен 0, если плюс, и 1, если минус (отрицательное число то есть).
3. Находим значение выражения целая_часть(log_2(число))+1023. В цикле находим остатки от деления его на 2, заносим их в bool[11]-bool[1]
в обратном порядке.
4. Разделяем целую и дробную чсти, сохраняем их в разные переменные.
5. Для целой части в цикле находим остаток от деления её на 2, пока не останется остаток от деления 1 или 0, заносим в этом же цикле значения
в массив с bool[13+log_2(целая_часть)] до bool[12], в обратном порядке.
6. Для дробной части в цикле находим целую часть числа при циклическом умножении на 2. Целую часть запоминаем и отбрасываем, дробную умножаем дальше.
Цикл до тех пор, пока при умножении в результате не получится 1. Заносим в прямом порядке, т.е. с начала (а начало на следующей ячейке после
окончания пред. записи).
7. Теперь в цикле собираем в int[2] с конца bool[64], помня, что в int[0] идёт bool[0]-bool[31], а в int[1] идёт bool[32]-bool[63].
8. Ах, да, ещё BigEndian забыл.
エキスパートでスクリプトだけフォルダに移動したらどうなるかを書いてみました。機能するのですが、本来の姿ではありません。スクリプトは8つの保留注文を作成しますが、Expert Advisorsのあるフォルダに保存するだけでは、各ティック後に8つの保留注文が作成されます。古い注文が締め切られた後に、新しい8つの注文をする必要があります。
脚本に「延期」しか書いていないのでしょうか?そうすると、先延ばしになるだけです。ダニの数だけ入ってくるので...。然うは.........
その中に3つ目のチェッカーインヒビターを入れなければならない...。
スクリプトをexpertsフォルダに移動しただけでは、このような現象が起こります。動作はするのですが、本来の姿ではありません。スクリプトは8つの保留注文を作成しますが、expertsフォルダに保存するだけでは、各ティック後に8つの保留注文が作成されます。古い注文が締め切られた後に、新しい8つの注文をする必要があります。
間違いを発見しました。この関数のライブラリでは、以下の行に
は、13番目、14番目、15番目の各数字に0を削除する必要があります。今、正しく
こんにちは、ライブラリ関数です。
Нашел ошибку. В библиотеке для данной функции в строке
надо удалить по нулю в 13, 14 и 15 числе.
Теперь правильно
Hello ライブラリ関数。
脚本に「延期」しか書いていないのでしょうか?そうすると、先延ばしになるだけです。ダニの数だけ入ってくるので...。然うは.........
禁止事項チェッカーを入れないと・・・。
)))))我慢できない)))))
よし、本題に入ろう。2つ目のTFのコードの最適化に取り組んでいますが、RateInfo構造体を1つのブロックに書くために、doubleをint[2]に変換することにしました。そこで、実現不可能な 方法も含め、可能な限りの方法を記載し、誰かが間違わないように注意することにしました。
1.WinAPI(msdn)。一般的に、変換機能というのはあまりないんです。これは、変換がc型変換を多用するためで、次のようなものです。
次の行でint i1 が char に変換され、最後の行で char s2 が int に変換されています。 その結果、これらのものはすべて、いわゆる「変換関数」で使用されることになりますが、実際にはどのWinAPI DLにもなく、ヘッダー.hファイルで次のようなマクロを使って宣言されています。
のように、コンパイル時にプリプロセッサで文字列に展開されます。しかし、ヘッダー.hファイルはdllではなく、開発環境(Studio、Borland、gccなど)でのみ使用されるものです。したがって、MQL4にとっては良くも悪くもない。しかし、その関数がヘッダ.hファイルの中でしか宣言されていないか、System32にあるいくつかのDLLの、詮索されないように隠されたエクスポート関数にあるかは、いつでも確認することができます。
2) WinAPI (CRT dll)。これらのDLLは、msvcp*, msvcr*, msvcrt*, msvci*, msvcirtという名前です。ここでは、_atodbl, _atoi64, _atoldbl, _ftol, _i64toa, _itoa, _ltoa, _strtoi64, _strtoui64 _ui64toa, _ultoa, atof, atoi, atol, strtod, strtol, strtoulと選択肢が広くなっています。名前に含まれる記号には、次のような意味があります。
しかし、期待された_dtoi64/_dtoui64はまだありません。一方、msvcrt*, msvci*, msvcirt.dllの定義ファイルを使用する場合
は、ひねっても、ファイル操作としてしか利用できません(それらはコンソールです)。
msdnとは別に、このサイトでも検索が 可能です。こちらはサイト内検索バー です。同様の「便利な」msdnの検索文字列は こちらです。どのように違うのですか?msdnには機能についての記述がありますが、全くないものもあります(例えばNativeAPI)。一方、代替のものでは、あらゆるシステムDLLのエクスポートテーブルが存在しますが、説明はありません。基本的に、自分でDLLからエクスポートテーブルを引っ張ってくる(IDA、PE Explorerなど)よりも、ウェブサイト上のエクスポートテーブルのセットの方が簡単です。
3.アセンブラの挿入(正確にはマシンコードの挿入)。この点については、公式ドキュメントが非常に曖昧なので、少し説明します。MQL4におけるC++のインサート
asm/_asmは関数ではなく、プリプロセッサー指示文であり、system32/*.dllのどこにも定義されていません(サイト内検索を参照ください)。つまり、そんなものはないのです。
msdnのWinAPI-functionの定義によると、lpTimerFuncの ような関数/プロシージャへのポインタを渡す必要がありますが(フォーラムに完全な例が あります)、msdnでは次のように宣言されています。
UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc//<- );
またはlpfnWndProc (フォーラムに ある未完成の例、msdn宣言とmql4構造体宣言の試み).他に方法はありません、MQL4はインタプリタです、関数のアドレスは存在しません、渡すものはありません、ただ機械語コードで書かれている場合のみです。そして,int型の配列にまとめられ,関数に参照渡しされる.
したがって、コンパイルされたアセンブラの挿入(つまりマシンコード)は、このタスクには適用できません - 彼らは完全に異なる範囲を持っています。もっとも、このようなint配列はshell32.dll経由でcmdのデバッグで実行することができます。 そこでコマンドラインを渡すことはできないようですが、keybd_event経由で仮想キーを使って書き込むことは可能です。
4.インサートなしの純粋なMQL4でdoubleをint[2]に変換する独自の関数を書いています。しかし、コードのサイズと性能を試算して、あきらめたんです。モジュール自体も書いていないのですが、アルゴリズムは以下のようなものだと思います。
実行には非常に長い時間がかかると思います。そこで私は、最終的に最も明白で簡単な解決策にたどり着きました。
5.C++で自作したDLLを使用。コードは以下の通りです。
スクリプトで。
Int upper[0]は参照渡しなので反転して います。得ることができます。
...うまくいきました、ダンプの行は同じです。添付のフォルダに、librariesにdouble.dll、samplesにsource dll、scriptsにscriptがあります。
夕方:アーカイブを再ダウンロードし、スクリプトとDLLのコードを少しいじった。
何が悪かったのか理解できない。なぜか予定通りポジションが閉じない?
以下は、ポジションを開く基準です。
以下は、ポジションを閉じる際の基準です。
と、こんな感じです。
ダメだ!標準ライブラリの関数は触っちゃダメだディマは禁止されました :-))
なぜ、ここで道化を作るのか?エラーが発生した場合は、servicedkに報告するか、自分でコピーを作成する必要があります。
何が悪かったのか理解できない。なぜか予定通りポジションが閉じない?
以下は、ポジションを開く基準です。
以下は、ポジションを閉じる際の基準です。
と、こんな感じです。
また、クロージング基準のチェックはどの程度の頻度で行われているのでしょうか?ひょっとしてバーじゃなくて?
また、クロージング基準のチェックはどの程度の頻度で行われているのでしょうか?ひょっとしてバーじゃなくて?
質問の主旨がよくわからないのですが。始値 テストモデル(形成されたバーでのクイックメソッド)