標準のインジケーターが上書きされるのか!? - ページ 5 1234567 新しいコメント Forex Trader 2006.11.15 11:34 #41 以下は、Satoriインジケータの新バージョンです(通貨Currency1、Currency1の指標のみ追加されています)。 //+------------------------------------------------------------------+ //| RedrawIndicators-2.mq4 | //| Satori | //| http://www.metaquotes.ru/forum/7790/ | //+------------------------------------------------------------------+ #property copyright "Satori" #property link "http://www.metaquotes.ru/forum/7790/" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 Yellow //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; extern int BarsCount=20; //кол-во считаемых баров, если 0 - то все extern string Currency1="EURUSD"; extern string Currency2="GBPUSD"; int handle,handle2; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexLabel(0,Currency1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,ExtMapBuffer2); SetIndexLabel(1,Currency2); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,ExtMapBuffer3); handle= FileOpen("TestFile.csv",FILE_CSV|FILE_WRITE,';'); handle2= FileOpen("TestFile2.csv",FILE_CSV|FILE_WRITE,';'); if(handle<1 || handle2<1 ) { Print("Файл не обнаружен, последняя ошибка ", GetLastError()); return(false); } else { FileWrite (handle,"index",Symbol(),"","index1",Currency1,"","index2",Currency2); FileWrite (handle2,"index",Symbol()," ",Currency1," ",Currency2); } return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- FileClose(handle); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int i; double test1,test2; datetime tt1,tt2,TimeMain; BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period())))); for (i=0;i<BarsCount-counted_bars;i++) { TimeMain=Time[i]; ExtMapBuffer1[i]=iTime(Currency1,Period(),iBarShift(Currency1,Period(),TimeMain)); ExtMapBuffer2[i]=iTime(Currency2,Period(),iBarShift(Currency2,Period(),TimeMain)); ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]); tt1=Time[i]-ExtMapBuffer1[i]; tt2=Time[i]-ExtMapBuffer2[i]; if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) { if (FileWrite (handle, i,TimeToStr(Time[i]),"",iBarShift(Currency1,Period(),ExtMapBuffer1[i]),TimeToStr(ExtMapBuffer1[i]),"",iBarShift(Currency2,Period(),ExtMapBuffer2[i]),TimeToStr(ExtMapBuffer2[i]) )<=0) Print("нифига не пишет!!"); } FileFlush(handle); if ((iTime(Symbol(),Period(),i)!=iTime(Currency1,Period(),i) || Time[i]!=iTime(Currency1,Period(),i) || iTime(Currency1,Period(),i)!=iTime(Currency2,Period(),i) ) && i>0) { if (FileWrite (handle2,i, TimeToStr(Time[i])," ",TimeToStr(iTime(Currency1,Period(),i))," ",TimeToStr(iTime(Currency2,Period(),i)) )<=0) Print("нифига не пишет!!"); } }//---- return(0); } //+------------------------------------------------------------------+ Forex Trader 2006.11.15 11:36 #42 MIGでチェックするために新規にアカウントを開設。インジケータを起動し、チャートから外し、作成したチャートを確認すると、エラーは一つもありません(ファイルは空です)。さて、私はGBPJPY H4、EURUSD H4、GBPUSD H4のMIGによる引用のアーカイブをチェックします(実験の純度のために、私は以前のチェックから通貨を使用しました)。 Forex Trader 2006.11.15 12:06 #43 不思議なことに、GBPJPYの履歴が空になっています。(EURUSD H4とGBPUSD H4の履歴はあります)おそらくTestFile.csvとTestFile.csv2ファイルにデータがないことが原因でしょう。同時にGBPJPYの H4チャート 自体も正しく表示されます。 1)時系列がキャッシュされているように見える(そのためチャートが表示される) 2)データセンターのアドレス(端末がデータセンター経由でAlpariデモ口座に接続される前) を疑いました。そこでデータセンターのアドレスを削除してAlpariデモ口座に切り替え、切り替えに成功、データセンターは切り離された。MIGのデモ口座に戻したところ、サーバーへの接続は成功したが、MarketWatchのデータは変化しなかった。GBPJPY H4(チャート上)の更新を余儀なくされ、履歴がバウンス。 しかし、最後の気配値は全ペアで10-43のままです。ビルド199を持っています。 今度はRedraw2インジケータを動かしてみる MarketWatchを見てみたが、どこも同じ10:43という時間になっている。 Forex Trader 2006.11.15 12:32 #44 うーん...とにかくデータセンター経由で接続されていることがわかりました。現在はすべて順調で、MarketWatchは正しいデータを表示しています。今、より深い歴史を知ろうとしている。 Forex Trader 2006.11.15 13:29 #45 更新され、ところどころにある名言がとても興味深いです Forex Trader 2006.11.15 14:17 #46 このグラフがミグのものなら、こんな仕掛けがあるんですね。今年もすでに2回ほど見かけました。私はMIGから私のEURUSDの履歴にdojic 08.09.2004と高〜1.7493を持っています。 Forex Trader 2006.11.15 14:24 #47 そうです、MIGです :) Forex Trader 2006.11.15 14:54 #48 念のため、インジケータを起動する前にターミナルを再読み込みしました(時系列キャッシュを除外するため)。インデックス番号1000を境に、再びエラーが発生するようになった。 では、3つ目のバリエーションとして、すべてのドットを点描するようにします。 Forex Trader 2006.11.15 15:53 #49 以下、第3弾 //+------------------------------------------------------------------+ //| RedrawIndicators-2.mq4 | //| Satori | //| http://www.metaquotes.ru/forum/7790/ | //+------------------------------------------------------------------+ #property copyright "Satori" #property link "http://www.metaquotes.ru/forum/7790/" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 Yellow //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; extern int BarsCount=20; //кол-во считаемых баров, если 0 - то все extern string Currency1="EURUSD"; extern string Currency2="GBPUSD"; int handle,handle2; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexLabel(0,Currency1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,ExtMapBuffer2); SetIndexLabel(1,Currency2); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,ExtMapBuffer3); handle= FileOpen("TestFile3.csv",FILE_CSV|FILE_WRITE,';'); handle2= FileOpen("TestFile3-2.csv",FILE_CSV|FILE_WRITE,';'); if(handle<1 || handle2<1 ) { Print("Файл не обнаружен, последняя ошибка ", GetLastError()); return(false); } else { FileWrite (handle,"index",Symbol(),"iBarShift1","index1","Time[index1-1]",Currency1,"Time[index1+1]","iBarShift2","index2","Time[index2-1]",Currency2,"Time[index2+1]"); FileWrite (handle2,"index",Symbol()," ",Currency1," ",Currency2); } return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- FileClose(handle); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int i; double test1,test2; double Bar1,Bar2; int iBarShift1,iBarShift2; datetime tt1,tt2,TimeMain; BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period())))); for (i=0;i<BarsCount-counted_bars;i++) { TimeMain=Time[i]; iBarShift1=iBarShift(Currency1,Period(),TimeMain); iBarShift2=iBarShift(Currency2,Period(),TimeMain); ExtMapBuffer1[i]=iTime(Currency1,Period(),iBarShift1); ExtMapBuffer2[i]=iTime(Currency2,Period(),iBarShift2); ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]); tt1=Time[i]-ExtMapBuffer1[i]; tt2=Time[i]-ExtMapBuffer2[i]; if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) { Bar1=iBarShift(Currency1,Period(),ExtMapBuffer1[i]); Bar2=iBarShift(Currency2,Period(),ExtMapBuffer2[i]); if (FileWrite (handle, i,TimeToStr(Time[i]),iBarShift1,Bar1,TimeToStr(iTime(Currency1,Period(),Bar1-1)),TimeToStr(ExtMapBuffer1[i]),TimeToStr(iTime(Currency1,Period(),Bar1+1)),iBarShift1,Bar2,TimeToStr(iTime(Currency2,Period(),Bar2-1)),TimeToStr(ExtMapBuffer2[i]),TimeToStr(iTime(Currency2,Period(),Bar2+1)) )<=0) Print("нифига не пишет!!"); } FileFlush(handle); if ((iTime(Symbol(),Period(),i)!=iTime(Currency1,Period(),i) || Time[i]!=iTime(Currency1,Period(),i) || iTime(Currency1,Period(),i)!=iTime(Currency2,Period(),i) ) && i>0) { if (FileWrite (handle2,i, TimeToStr(Time[i])," ",TimeToStr(iTime(Currency1,Period(),i))," ",TimeToStr(iTime(Currency2,Period(),i)) )<=0) Print("нифига не пишет!!"); } }//---- return(0); } //+------------------------------------------------------------------+ Forex Trader 2006.11.15 15:56 #50 第3版では明確な回答が得られなかったので、各商品の4時間足でTime[]を確認し、余分な秒数があるかどうかを確認する必要があります。秒が見つからなかった場合は、ターミナルエラーとなります。 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
1)時系列がキャッシュされているように見える(そのためチャートが表示される)
2)データセンターのアドレス(端末がデータセンター経由でAlpariデモ口座に接続される前)
を疑いました。そこでデータセンターのアドレスを削除してAlpariデモ口座に切り替え、切り替えに成功、データセンターは切り離された。MIGのデモ口座に戻したところ、サーバーへの接続は成功したが、MarketWatchのデータは変化しなかった。GBPJPY H4(チャート上)の更新を余儀なくされ、履歴がバウンス。
しかし、最後の気配値は全ペアで10-43のままです。ビルド199を持っています。
今度はRedraw2インジケータを動かしてみる
MarketWatchを見てみたが、どこも同じ10:43という時間になっている。
では、3つ目のバリエーションとして、すべてのドットを点描するようにします。