を int で宣言しています。それが、あなたの手に入るのです。最近、多くの機能が値についてかなり細かくなってきています。変換で確保したほうがいい。 私自身、最近そのような問題に直面しました。以前は何の問題もなかったのですが。しかし、コードを修正するように言われ、ダブルにキャストするまではまともに動こうとしなかったのです。
Konstantin Nikitin: 持っている方向はintで宣言されています。それが、あなたの手に入るのです。最近、多くの機能が値についてかなり細かくなってきています。変換を大事にしたほうがいい。 私自身、最近そのような問題に直面しました。以前は何の問題もなかったのですが。しかし、コードの修正を依頼され、ダブルに持っていくまでまともに動こうとしなかった。
PlotIndexSetInteger(0,PLOT_ARROW,code);
//--- установим пустое значение PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
SetIndexBuffer(0,Buf1,INDICATOR_DATA);
PlotIndexSetString(0, PLOT_LABEL, "Break");
//----PlotIndexSetInteger(1,PLOT_ARROW,code);
//--- установим пустое значение PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
SetIndexBuffer(1,Buf2,INDICATOR_CALCULATIONS);
PlotIndexSetString(1, PLOT_LABEL, "Break");
OnCalculate()では、条件であるup変数を定義しています。
もし、それが真であれば、次のコードが実行されます。
i=nPoint1; BreakUp=false; BreakDn=false;
while(i>=0 && BreakUp==false && BreakDn==false)
{
Print("i ",i);
tmp=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i);
tmp1=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i)-resultL;
if(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits())
&& NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakUp=true;
if(channelbreak) Buf1[i]=tmp;
Comm="\nПробой вверх на уровне " + DoubleToString(tmp,Digits());
} elseif(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakDn=true;
if(channelbreak) Buf1[i]=tmp1;
Comm="\nПробой вниз на уровне "+DoubleToString(tmp1,Digits());
} elseif(NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))
{ size=ArraySize(Buf1);
Print("size ",size);
BreakUp=true;
if(channelbreak) Buf1[i]=tmp;
Comm="\nПробой вверх на уровне "+DoubleToString(tmp,Digits());
} else
Comm="\nПробоя канала нет"; //i--;
} } Ошибка происходит при входе в цикл while при присвоении значения переменной значению буфера. Проверка на
размер массива буфера выдает ноль. Т.е. буфер не инициализируется. Всю голову сломал, не могу понять почему. В чем затык?
ありがとうございます。
他にも、もしかしたら1)はブロッキングブローカーかもしれない、というのを見つけた。
https://www.mql5.com/ru/forum/38456/page127
https://www.mql5.com/ru/forum/304679
2)110%と70%が常に強くジャンプしているのを見たことがある、まだ数えたことがない。負荷と関係があるのかもしれませんが、私はそうは思いません。小さいものを開けたら、スペックのレバレッジが同じで、バランスもほぼ同じ。
信号に関する共通点はこれ
https://www.mql5.com/ru/forum/10603/page394
情報については
MT5 (build 2390) で、クラス構造の 記述に含まれる中括弧が正しくカウントされない不具合を修正しました。
投稿ありがとうございます、修正しました
というわけです。
じゃなくて
方向 -1; +1; 0
というわけです。
じゃなくて
方向 -1; +1; 0
というわけで
そして、このように。
も動作しますが、2番目のオプションは動作しません。
私自身、最近そのような問題に直面しました。以前は何の問題もなかったのですが。しかし、コードを修正するように言われ、ダブルにキャストするまではまともに動こうとしなかったのです。
持っている方向はintで宣言されています。それが、あなたの手に入るのです。最近、多くの機能が値についてかなり細かくなってきています。変換を大事にしたほうがいい。
私自身、最近そのような問題に直面しました。以前は何の問題もなかったのですが。しかし、コードの修正を依頼され、ダブルに持っていくまでまともに動こうとしなかった。
はい、intです。 しかし、掛け算です。整数では、30*1=30でもあります。数年前のビルドでは、この30個がピッキングによって決定されたので、2番目のバリエーションでも問題なく動作したことを100%確信しています。
は、MT5のもう一つの「機能」のような気がします...。少なくともブロックは装飾的ですが、どこかにautolotやstoplossのような場合 - 悲しみが起こるかもしれない - 私はしばしば-1によって乗算することによって逆にして...
ありがとう、別の松葉杖を使うよ...。
も動作しますが、2番目のオプションは動作しません。
ああ、うっかりして間違ったコードをコピーしてしまった。
Konstantinの言う通り、なぜdoubleを期待するところにintを置くのか...。これはmql5の特徴ではなく、オーダーに慣れるための試行錯誤なのです。
よろしくお願いします。
インジケータがarray out of rangeエラーで投げ出される。
このコードでは、バッファを定義しています。
グローバル変数の 宣言
Init()の中で、プロパティを定義しています。
OnCalculate()では、条件であるup変数を定義しています。
もし、それが真であれば、次のコードが実行されます。
インジケーターのデバッグ中に、このインジケーターの値が開いたチャートに 表示されないのは正常なことなのか、明らかにしてください。すなわち、例えば、デバッガでMACDを開く。バッファに値を書き込むサイクルでブレークポイントを設定しました。ChartRedraw()書き込み後の値。値が書き込まれた後、この値が一度にチャートに表示されることを期待しますが、空のウィンドウが表示されるだけです。
ビルド2380 x64。