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

 

Forexman77:
EMAレベルを価格としてプログラムに表示させるにはどうしたらよいですか?EMA1が期間(1)、EMA2が期間(0)で、EMA1が1.3321、EMA2が1.3200で今期終了したとします。式(EMA1→EMA2)の結果が0.0121であることが必要です。スクリプトを実行すると、「0.0121」が必要なのに、アラートには「0」が表示されます。この問題を解決するにはどうすればいいのか。

double delta = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0) - iMA(NULL,0,0,0,MODE_EMA,PRICE_CLOSE,0);

if (delta == 0.0121) Alert("Delta=0.0121"); 
 
Forexman77:
EMAレベルを価格としてプログラムに出力させるには?期間(1)のEMA1、期間(0)のEMA2、EMA1は1.3321、現在の期間1.3200のEMA2に等しいと仮定します。式(EMA1→EMA2)の結果が0.0121であることが必要です。スクリプトを実行すると、「0.0121」が必要なのに、アラートがゼロと表示されます。この問題を解決するにはどうしたらいいでしょうか?

スクリプトそのものを見ることは可能でしょうか?- おそらく、間違ったデータ型、例えばdoubleではなくinterger(ゼロに丸める)か、ゼロの原因となる他の何かを持っていると思われます。

ちなみに、以前書いたものをスクリプトで確認すると、スクリプト自体(おそらくインジケーターを確認するためだけに書いたと思われる)にエラーがある場合と、インジケーターのコード自体にエラーがある場合があります。

 
TarasBY:
私が提案したように、注文を正しくフィルタリングし、手数料とスワップを計算に含めていれば、すべてが正しく機能します。


非常に複雑なパスを出したのでしょう。

というのは、私には効き目がないのです。


私は愚かにも、あなたのサンプルに次のように挿入してしまいました。

ld_Profit = fGet_ProfitLastCloseOrd (12);    
Print (ld_Profit);

ある程度の数値は出ますが、現実とはかけ離れたものです。

どこに12という数字を入力すればうまくいくのか、教えていただけませんか。だって、「注文のフィルタリング」なんて全然知らないんだもん...。

 
lottamer:


非常に複雑な方法を提示したのでしょう。

というのは、私には効き目がないのです。


私は愚かにも、あなたのサンプルに次のように挿入してしまいました。

ある程度の数値は出ますが、現実とはかけ離れたものです。

どこに12という数字を入力すればうまくいくのか、教えていただけませんか。だって、「オーダーフィルタリング」なんて全然知らないんだもん...。

関数の動作をよりよくコントロールするために、すべての中間計算をチャート上で行っています。

あとは、あなたがコードを書くだけです。

自分で理解するか(例として、作業用のスクリプトをあげました)、あるいは、それをやってくれる人を探すか、2つの方法があるのです。

P.S.いきなり理解しようと思ったら、ここから 始めると良いですよ。

ファイル:
 
Chiripaha:

スクリプトそのものを見ることは可能でしょうか?- おそらく、間違ったデータ型、例えばdoubleではなくinterger(ゼロに丸める)か、ゼロの原因となる他の何かを持っていると思われます。

ちなみに、以前書いたものをスクリプト化した場合、エラーはスクリプト自体(おそらくインジケーターをテストするために書いたもの)にあるか、インジケーターのコード自体にあるかのどちらかになることがあります。


おっしゃるとおり、EMAをintからdoubleにしたら、すべてそのとおりになりました。
 
TarasBY:

機能を完全に制御するために、すべての中間計算がチャート上に表示されます。

あとは、あなたがコードを書くだけです。

自分で考えるか(例題を使い、作業用のスクリプトをお渡ししました)、誰かに頼むか、2つの方法があります。

P.S. いきなり図星を突かれた方は、こちらから どうぞ。


ありがとうございます、ぜひとも解明してみます
 
Forexman77:
EMAの水準を価格として出力させるには、どうしたらよいですか?EMA1が期間(1)、EMA2が期間(0)、EMA1が1.3321、EMA2が1.3200で、今期は1.3321と仮定します。式(EMA1→EMA2)の結果が0.0121であることが必要です。スクリプトを実行すると、「0.0121」が必要なのに、アラートがゼロと表示されます。この問題を解決するにはどうしたらいいでしょうか?

計算でint型ではなくdouble型の 変数を使用する。

式の結果を計算するときは、NormalizeDouble(number1-number2, 望みの精度)を使用します。

DoubleToStr(得られた結果、希望する精度)を使って、結果を画面(ジャーナル)に表示することができます。

あなたのコードがなければ、他に提案することはないのですが...。

 
Forexman77:
あなたの言う通り、EMAをintからdoubleに削除したら、全てが本来の姿になりました。 。

ここで、すでに発見されているのですが...。とにかく、隠れたエラーや不正確さを避けるために、double 型の データを比較したり計算したりするときは、正規化を使用することに注意してください。
 
Chiripaha:

結論:もちろん、興味本位で、ロボットの注文はいつ決まったのか(事前か否か、ロボットと同時期のマニュアルか否か、など)、大まかな説明しかしていないので、もっと詳しく状況を説明してもらうことも可能です。しかし、この場合でも、ブローカーは自分のスレッドを持っていて、おそらく取引をキューに入れるので、ブローカーとだけ取引する必要があるのです。仮に、手動による保留注文が先に発注された場合、その執行時刻が異なるため(他のクライアントの待ち行列を含む)、価格が異なる可能性があります。ロボットがシグナルが形成された期間内に注文を出した場合、キュー内の注文の到着は明らかではありません - それ故、実行価格にバイアスがかかる可能性があります。また、何も書かないポジションの大きさにも影響されるかもしれませんが...。など...

でも...とにかく、これはブローカー(DC)に聞いてみないとわからない。そして、私が言及しなかった理由を、彼はたくさん見つけてくれるだろうと思います。- そして、アドバイスは正しかった:あなたの手の中に、ブローカーへのログは、もちろんあなたはまだあなたの保留中の注文が移動していると思う場合を除き、。しかし、保留中の注文とこの保留中の注文に対する取引という2つの異なる概念を混同しないようにしてください。指値注文は、宣言された数量で、最も近い任意の価格で市場に参入する指示である。そして、ディールとは、宣言した数量(ロット)の注文を実行することが可能であった価格です。- そして、これらの注文の価格は異なる可能性が高いです(特に、あなたがリンクを与えられたファストマーケットでは)。指値注文の場合、注文の価格と約定価格は(定義上)等しくなります。

また、デモとリアルブローカーに差がないのもGood!- それは、そのブローカーが顧客を引きつけるために偽の取引をしないことを示しています(あなたの言葉から)。- この場合、見るべき矛盾はない。


このような詳細なご回答をいただき、すべてが明らかになりました。Instant Executionシステムを利用すれば、この問題は解決するのでしょうか?

私が触れていない条件についてはどうでしょう。

ロボットは手動で発注したものよりも早く発注したが、ニュースの前に修正された。

取引量は同じで、距離もほぼ同じだった

といった具合に、ほぼ同じ条件であった。

 
TarasBY:
現在の日は、現在のD1バーの始まり(iTime(NULL、PERIOD_D1、0))から始まりますが、あなたは簡単な方法を探していないのですか!?:))


ここで問題です。

すべてうまくいくが、1回だけ。例えば、ある日の期間(iTime (NULL,PERIOD_D1, 0))を設定しても、翌日には動作しないのです。

をテストするためのテストコードを書きました。

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_M1, 0));  

if  (GetProfitFromDateInCurrency()<1 && GetProfitFromDateInCurrency()>-1)
    { My_buy ();  My_close(); }
поставил период МИНУТКИ, так чтобы за минуту слить доллар на спреде и остановиться, ДО НАЧАЛА ВТОРОЙ МИНУТЫ. И он льет и останавливается. А вот почему на второй минуте он не открывает сделок?