ゼロディバイド(課題を発見、しかしなぜ?) - ページ 3

 
double loss_for_1_lot = pips_to_bsl/ ts * tv ;

0と表示されるのはtvではなく、tsです。5桁のブローカーではtsは0と表示されるかもしれません(4桁)。

履歴をダウンロードする 前に、そのペアを開いてブローカーから市場情報を取得したことがないように聞こえますが、どうでしょうか?

 

ゼロディバイドが 投稿されたコードによって生成されたとは考えにくいです。

DomGilbertoはこのスクリプトをコンパイルし、ゼロティックサイズを返していると思われるチャートに添付してください。

int start()
  {
//----
   int i = Bars-1;
   int cnt;
   int tscnt = 0;
   int tvcnt = 0;
   double ts = MarketInfo(Symbol(), MODE_TICKSIZE);
   double tv = MarketInfo(Symbol(), MODE_TICKVALUE);
   while(i >=0)
   {if(ts < 0.00001) tscnt++;
    if(tv < 0.00001) tvcnt++;
    i--;
   }
   Alert("TickSize returned an erroneous value ",tscnt," times.");
   Alert("TickValue returned an erroneous value ",tvcnt," times.");
//----
   return(0);
  }
 
DomGilberto:

私が作ったこのビデオ(40秒くらい)が、私が言っていることを説明してくれることを期待しています(私がそれを明確にしているかどうか確信がないので)。

ビデオ: http://screencast.com/t/uMHY5DpM

最初の部分は、ライブチャート(リアル口座)にスクリプトをドロップすると、その「想定口座」のティック値とティックサイズが「0」を返すことがわかりますが、これはロットウィンドウ(単位)に表示されています。

2番目の部分は、同じブローカーを使用していますが、ロットベースのフィードで、今回はティック値とティックサイズを返します。ここでも、ロットを使って取引していることを図示しています...。

ストラテジーテスターについては、なぜうまくいったりいかなかったりするのか、まったくわかりません。バックテストを実行する間、口座も接続されています(デモの想定給餌口座(単位))。

次の質問ですが、もしこれが想定フィード口座から得られる典型的な反応であるなら、この状況でポジションサイズ計算を修正する方法を提案できますか? ロットベースのフィードでは完璧に動作します...もう少しうまく説明できるといいのですが。

あなたの「テスト」コードで異なるコードを使用している場合、それは何を証明するのでしょうか?

TICKVALUEは、ストラテジーテストの実行中であっても、現在値を返すことをご存知ですか? そのため、基本通貨が入金通貨でないペアの場合は、不正確となり、ロット計算が正しく行われません。

 

動画では、最初の例でGBPUSDを使い、2回目でGBPJPYを使っていますね。

もし、あなたのスクリプトをGBPUSDの通常ロットチャートに貼り付けたとしたら、tickvalueの値は得られますが、ticksizeもゼロになると思います。

これは、スクリプトのアラートがdoubleを使用しているため、0.00001が0と表示されるからです。

代わりにDoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),8) を使用します。

 

まず最初に、皆さんの協力に感謝します。

Gumrai "と "SDC "のビデオで、お二人が私に要求していることを確認します。スクリプトにMQL4のエイリアスのラベルを付けていますが、これは明らかにここに投稿されたあなたのコードに対応するものです。ビデオ: http://screencast.com/t/kglCd2hCae

ブローカーと対応するフィードは、一時停止中に変更されていません。フィードアカウントも想定内です(単位)。

@RaptorUKです。イヤーやっぱりTICKVALUEは今から現在値を返すんですね。 今見ている2番目の部分は、なんとなく論理的な気がします。私は、ポジションサイジングが正しいことを確認するために、想定フィード口座の一部としてtickvalueを利用することができるのか混乱しているのですが・・・?

 
DomGilberto:

まず最初に、皆さんの協力に感謝します。

Gumrai "と "SDC "のビデオで、お二人が私に要求していることを確認します。スクリプトにMQL4のエイリアスのラベルを付けていますが、これは明らかにここに投稿されたあなたのコードに対応するものです。ビデオ: http://screencast.com/t/kglCd2hCae

ブローカーと対応するフィードは、一時停止中に変更されていません。フィードアカウントも想定内です(単位)。

@RaptorUKです。イヤーやっぱりTICKVALUEは今から現在値を返すんですね。 今見ている2番目の部分は、なんとなく論理的な気がします。私は、ポジションサイジングが正しいことを確認するために、想定フィードアカウントの一部としてtickvalueを利用することができるのか混乱しています...?


その動画は、私の画面には大きすぎて苦痛です。

スクリプトコードとアラート結果だけ載せておけばいいのでは?

私の提案したコードであるはずのスクリプトに何を入れたのか知りませんが、"08 "という結果になることはありえません。

使用方法

Alert("TICKVALUE= ",DoubleToStr(MarketInfo(Symbol(),MODE_TICKVALUE),8));
Alert("TICKSIZE= ",DoubleToStr(MarketInfo(Symbol(),MODE_TICKSIZE),8));
 
DomGilberto:


@RaptorUKです。Yea TICKVALUEが今からの現在値を返すのは知ってました。 今見ている2番目の部分は、ある意味論理的だと思います。私は、ポジションサイジングが正しいことを確認するために、想定フィードアカウントの一部としてtickvalueを利用することができるのか混乱しています...?

まず、TICKVALUEが本当にゼロを返しているかどうかを確認する必要があります。
 
GumRai:


これらのビデオは苦痛です、彼らは私の画面に対して大きすぎます。

スクリプトのコードとアラートの結果を掲載すればいいじゃないですか。

私の提案したコードのはずのスクリプトに何を入れたのか知りませんが、"08 "という結果になることはありえません。

使用方法


すみません、「DoubleToStr」を入れ忘れたことに今気づきました!!失礼しました。

ティックサイズ = 0.00100000

ティックバリュー = 0.00001026

(GBPJPYの想定フィードに投下)

@SDC 私は単にここからあなたのコードをコピーして、新しいスクリプトに配置しました。それが返されていたものです。

 
新しいアップデートで、ゼロ除算が 発生する正確な場所を繰り返して遊んでいます。

私のコードのこのエリアは、計算を分解するための数式をプリントアウトしています。買い注文のストップロスに使われていない....

double loss_for_1_lot1 = pips_to_ssl/  ts * tv  ;
   if( loss_for_1_lot1 == 0.0 )Print(" ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: ", pips_to_ssl,"/",ts,"*",tv);


2013.10.02 11:57:19     2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1:  ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: 0/0.001*0.0001

double pips_to_ssl=SellStopPrice-sellPrice;
   if(pips_to_ssl == 0)Print(" ERROR - pips_to_ssl = 0 || The formula for this is: ", SellStopPrice,"-",sellPrice); 

2013.10.02 12:08:01	2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1:  ERROR - pips_to_ssl = 0 || The formula for this is: 117.249-117.249

 
DomGilberto:
OK新しい更新、私はそれがゼロ除算が発生する正確な場所を繰り返すと遊んできました。

私のコードのこのエリアは、計算を分解するための数式をプリントアウトしています。買い注文のストップロスに使われていない....



私の以前の投稿を参照してください。

"注意

double loss_for_1_lot = pips_to_bsl/ ts * tv ; //<<<<<<<<<<<<<<<<<<<<<<<<<<< This is giving me a "0" randomly sometimes?

は、pips_to_bslが0である場合にも0になることに注意してください。これは可能でしょうか?

bslでもsslでも、同じコーディングです。