[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 310

 

そんな問いかけ。今、どのように最適化すればいいのか?Expert Advisorの骨格は以下のようになりました。

init(){
        //если файл истории не существовал, формируем заголовок
}

start(){
        //ловим тики
        //смотрим, сколько прошло секунд с последнего вызова start():
                //если 1 или больше, то---(блок свеч)---
                        //запоминаем, сколько прошло секунд
                        //---(блок выбора режима)---
                        //формируем RateInfo - столько раз, сколько прошло секунд
                //если 0, то---(блок теней)---
                        //редактируем RateInfo - столько раз, сколько прошло секунд в прошлый раз
}

//---(блок выбора режима)---
//флаги в экстерне - все бычьи, все медвежьи или любые
//если все бычьи, то в close всегда ask
//если все медвежьи, то в close всегда bid
//Если любые, то
        //если текущий бид меньше предыдущего, то медвежья
        //в любом другом случае бычья

open-closeを変数に入れ、不要になった2番目のブロックFileSeekを削除、ローソク足のスタイルの選択(全て強気、全て弱気、任意)を追加、次のascやbidが前の高安より高いか低いかシャドーを追加、ヘッダーのフラグで起動するプリントによるトレース、行番号へのリンクで全てをコメント、フォーラムに読みやすいコードになるよう心がけました。印刷するための行番号も付けました。

さあ、見てください。

上はティックタイムフレーム、下はセカンドタイムフレームです。影(テール)は、1秒間に2ティックを捕らえ、ビッドまたはアスクが前回と異なる場合です。ティックは時計のように正確に動く2回目のティックの遅れは、ティック間の最小時間間隔よりも多くの時間を処理に費やすことを意味します。そのため、どのようにコードを最適化すればよいかを聞いているのです。コードを添付して、すべてオーバーコメントしたことを繰り返しています。分足でEAとして設定し、自律的に検索して「秒」+「商品名」を開くと、どのように動作するかを確認することができます。

ファイル:
hhi.jt.mq4  29 kb
 
david2:
この機能をEAに実装するには?いずれかのベイ・オーダーでTPまたはSLがトリガーされると、すべてのベイ・オーダーがクローズされる必要があります。

プログラミング経験のある方、ヒントです。

1.買い注文を開いた後、買い注文の数を数える

2.その番号をグローバル変数 に保存する

次のティックで、買い注文の量が前のティックより少ないという条件を確認し、すべての買い注文を決済します。

コドベースの未決済ポジションの種類や、選択した種類(買いまたは売り)のポジションの決済別に注文量を計算する機能があります。

キムからの機能で便利な機能がたくさん

 

変数の型変換について。
行の記述に係数ダブルKの値をテキストで記述(K=0.573)。
コード実行中に、係数Kの値が数回変化しています。
ここで、行記述文字列 ObjectDescription(string name)を抽出した後、変数 double Z に値 K=0.573 を乗じたい。
MQLでstring型の 変数をdouble型の変数に変換して、再度0.573を得ることは可能でしょうか?可能であれば、リンクを教えてください。
リーズナブル。シュルキン

 
Shurkin:

MQLでstring型の変数をdouble型の変数に変換して再度0.573を得ることは可能でしょうか?できれば、リンク先を教えてください。
.

https://docs.mql4.com/ru/convert/StrToDouble
 
08:05:30 Sec.TF AUDUSD,M1: 15
08:05:31 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:35 Tick.tf AUDUSD,M1: 0
08:05:38 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:40 Tick.tf AUDUSD,M1: 0
08:05:41 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:43 Tick.tf AUDUSD,M1: 0
08:05:51 GMT オーダスド、M1: 15062
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:55 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:57 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 16
08:05:59 Tick.tf AUDUSD,M1: 0
08:06:00 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:09 GMT オーダスド,M1: 10156
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:17 Tick.tf AUDUSD,M1: 0
08:06:18 Tick.tf AUDUSD,M1: 0
08:06:26 GMT オーダスド、M1: 5078
08:06:27 Tick.tf AUDUSD,M1: 0
08:06:28 Tick.tf AUDUSD,M1: 0
08:06:30 Tick.tf AUDUSD,M1: 31

08:06:32 GMT オーダスド、M1: 15

両方のコードでミリ秒タイマーを 持つログの一部(ティックと秒の時間枠)。私がこれまでに思いついたのは、サイクルを完全に削除すること、つまり最後のティックから何秒経過しても1秒間に1回以上のティックを行うことです - それは常に1本のロウソクです。秒間などのティックがあった場合-影があるローソク足。しかし、その後、「穴」のある2つ目のTFがあり、High[15]によって、15秒前のascの値は取らないとしよう...。

 
hoz:

関数をどう書けばいいんだろう、と。N本のローソク足 がある方向にロールバックしたときに、その本数を計算するというものです。BUT.そのためにはいくつかの条件があり、正確には時間をかけてリストアップしていくことになる。

例えば、トレンドが下向きだとしよう、、、。...プルバックは上昇する。5本のローソク足が上昇し、それぞれのローソク足が強気で、例えばそれぞれのローソク足のサイズがi_sizeOfCurrBarより 大きく、その他の条件があれば、継続して強気のバーの数を出力して、関数から何らかの結果を返したい。

どのような書き方をすればいいのでしょうか?今のところ、書き始めて、棒グラフでループさせて、何とか履歴の深さで、固定された棒グラフの数ではなく、棒グラフで、条件によって興味のあるパラメータで表示を制限した方がいいということは理解しています。

これが、私が持っている、手に入れたものです。

現時点では、最後から2番目のバーからインデックス6のバーまで、つまり5本のバーを連続させているだけです。しかし、私はExpert Advisorに、強気なバーだけを検索させ、すべてのバーを連続させないようにしたいのです。どうすれば適切に実装できるのか?

サイズによるフィルタリングは、なんとなく正しくできていますね。

さて、すでにすべてが書き込まれている場合、下部のカウンタはすでにnht,etvsvbパラメータで連続バーの数を計算し、そのようなバーが十分にあれば、関数のいくつかの値が返されます。

いつものようにオリジナルで、「下から」小節を数える...。

for (int i=Bars-1; i>=Bars-6; i--)
 
Zhunko:

いろいろな方法があるんです。

1.グローバル変数 を通じて

2.ファイル 経由。

3.iCustom()経由。

4.グローバルグラフィック変数を通じて

5.マッピング ある端末から別の端末にデータを転送することができます。または1つのターミナルで、MT4のグローバル変数の制限なしに、あるウィンドウから別のウィンドウにデータを転送することができます。


どの作品が最速なのか?
 
gyfto:

どの作品が最速なのか?
5.マッピング
 
hoz:
印刷物では1や2の値を持つが...。一体どうなってるんだ?
Print("i = ", i, "; up = ", cnt, "; cnt = ", cnt);

ただの不注意です。一般に、ここでのboolは4バイトであり、0と1だけの値を取ることを義務付けてはいない。C++のブールアーンは1バイトです。個人的には、switch()の二進数演算で、複数の選択が必要な場合、常に0か1であることを信じてboolを使っています))こんな感じ。

bool f1, f2, f3, f4//флаги

switch(8*f4+4*f3+2*f2+f1){
   case 0:
   ...
   case 15:
}//без default
 
gyfto:

そんな問いかけ。今、どのように最適化すればいいのか?Expert Advisorの骨格は以下のようになりました。

open-closeを変数に入れ、不要になった2番目のブロックFileSeekを削除、ローソク足のスタイルの選択(全て強気、全て弱気、任意)を追加、次のascやbidが前の高安より高いか低いかでシャドウを追加、ヘッダーのフラグで起動するprintでトレースを追加、行番号へのリンクで全てをコメント、フォーラムに読めるコードを心がけました。印刷するための行番号も付けました。

さあ、見てください。

上部はティックタイムフレーム、下部は秒数です。影(テール)は、1秒間に2ティックを捕らえ、ビッドまたはアスクが前回と異なる場合です。ティックは時計のように正確に動く2回目のティックの遅れは、ティック間の最小時間間隔よりも多くの時間を処理に費やすことを意味します。そのため、どのようにコードを最適化すればよいかを聞いているのです。コードを添付して、すべてオーバーコメントしたことを繰り返しています。分足でEAとして設定し、自律的に検索して「秒」+「商品名」を開くと、どのように動作するかを確認することができます。

ロジックには踏み込んでいませんが、何か余計な計算をしているような気がします。1年半前、私は相場収集で同じ問題を解決し、天文分始で明確にカットしてM1ローソク足を形成していました。
もし興味があれば、あなたのコード(ファイル)の純粋な最適化のいくつかの瞬間を見てみることができるかもしれません。本当に、本気で最適化を語るなら、コードのランタイ ムを計測する必要があります。;)
ファイル:
hhi.jt_c_.mq4  23 kb