[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 647

 
Mathers:

の右側です。
 
フォーラムメンバーの皆様こんにちは。 トレンドラインを構築するための興味深いコードを見つけました。 そして、それで少し遊ぶことにしました - それはポイントではなく、パーセントでトレンドラインを描くだろうが、何らかの理由で - 私の完成後のタレットは、履歴を描画停止 - のみ最後の3バー(またはむしろあなたがタレットを実行すると、それは通常の開始以来描画トレンドライン、一度あなたがタレット-OKプロパティを更新するようにクリックして履歴がリセットされます)。 何がいけなかったのか?
以下のコードを描きましたが、太字で書いた部分のどこが問題なのか、どなたか教えてください。
問題は、インジケータがすぐにヒストリを逆方向に描画し、パラメータを変更してもリセットされないことです。
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

ダブルAUD。

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| カスタムインジケータ初期化関数
//+------------------------------------------------------------------+
int init()
{
//---- インジケータ

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2)を設定します。
SetIndexBuffer(0,Idx)を設定する。

//----
return(0)です。
}
//+------------------------------------------------------------------+
//| カストマーインジケーター初期化機能
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0)です。
}
//+------------------------------------------------------------------+
//| カスタムインジケータ反復関数
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=Bars-counted_bars;
for(int i=limit; i>=0; i--)
{
AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+De lta)となります。

//if (Curency =="AUDUSD")
Idx[i] = AUD;



}

//----

//----
return(0)です。
}
//+------------------------------------------------------------------+
 
Lonely_man:
フォーラムの皆さん、こんにちは。 トレンドラインを作るための面白いコードを見つけました。 少し遊んでみることにしました。

あるプログラマーの家庭で、息子が父親に「なぜ太陽は東から昇り、西に沈むのか」と詰め寄ったという逸話を、なぜか私は思い出した。

パパ、パソコンから目を離さずに、本当に東から昇るの?-はい -そして、西に沈む?- ああ 毎日か?- そうですね、動いているものは触らないようにしましょう。

 
Roger:

あるプログラマーの家庭で、息子が父親に「なぜ太陽は東から昇り、西に沈むのか」と詰め寄ったという逸話を、なぜか私は思い出した。

パパ、パソコンから目を離さずに、本当に東から昇るの?-はい -そして、西に沈む?- ああ 毎日か?- まあ、動いていれば何も触る必要はないんですけどね。

:))
 
Lonely_man:
フォーラムユーザーの皆様、こんにちは!トレンドラインを引くための面白いコードを見つけました。

面白いのは、自分の主義主張に従ってコードを変更したのに、学者軍団に欠点を見つけさせようとすることです。

というような情報を出力して、解説で得たい情報を得ようとしているだけではないでしょうか? すべてがうまくいっても、現在の価格には表示されず、チャートの下の方にあるデータを得ることができます - 私はseparatetwindsだと思います。

SZS グッドラック

 
IgorM:

面白いのは、自分の主義主張に従ってコードを変更したのに、学者軍団に欠点を見つけさせようとすることです。

というような情報を出力して、解説で得たい情報を得ようとしているだけではないでしょうか? すべてがうまくいっても、現在の価格には表示されず、チャートの下の方にあるデータを得ることができます - それはseparatetwindsだと思います。

SZS グッドラック

セパレータのことは知っています - 別ウィンドウで、それについてではありません。 このコードで何が起こるかわかりません - どうやらこの計算方法は、パーセンテージではうまくいかないようです((.

すぐに、なぜかあるジョークを思い出した。プログラマーの息子が父親のところにやってきて、「なぜ太陽は東から昇り、西に沈むのですか?

パパ、パソコンから目を離さずに、本当に東から昇るの?-はい -そして、西に沈む?- ああ 毎日か?- まあ、動いていれば何も触る必要はないんですけどね。

)))ヒント:クロス通貨取引に必要です。 GBPやJPYのドルに対するpipsの変化では、どちらが値下がりしたかという完全な情報は得られませんが、ドルに対する変化率ではすべてが明確にわかります。
 
Mathers:
ありがとうございます。EAは新しいティックが入るたびに起動するのに対して、スクリプトは無限ループで起動し続けないといけないという違いだけでしょうか。


必ずしもそうではありません。すべては脚本の目的次第です。スクリプトの目的が一発勝負の場合(これが大多数)、無限のループを作り上げる必要はないのです。このようなワンタイムスクリプトの例として、あらかじめ設定したロットでポジションを建てる際に、マーケットに投入する金額を計算する必要があります。最小ロットでのポイント価格は商品によって異なるため、必要な商品を開いてスクリプトを適用し、パラメータウィンドウに目的のロットを入力し、取引が開始された場合にブロックされる金額を確認する方が簡単です。

これはあくまで一例です。スクリプトの目的は異なるかもしれません。

 
Lonely_man:

分離は意識してる、別ウィンドウになってる、関係ない。 このコードでうまくいくのかー、どうもこのパーセント計算の方法はうまくいかない((.

すぐに、なぜかあるジョークを思い出した。プログラマーの家庭の息子が父親のところにやってきて、「なぜ太陽は東から昇り、西に沈むのですか?

パパ、パソコンから目を離さずに、本当に東から昇るの?-はい -そして、西に沈む?- ああ 毎日か?- まあ、動いていれば何も触る必要はないんですけどね。

)))英ポンドや日本円のドルに対するpipsでは、どちらが値下がりしたのか完全な情報にはなりませんが、米ドルに対する変化率ではすべてが明確にわかります。

かなりシンプルなインジケーターですね。 パーセンテージがpipsより優れているとは思えませんが、まあいいでしょう。

失敗もありましたが :)

1.

AUD=(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

パーセンテージを正しく計算するためには、括弧を付ける必要があります。

AUD=((iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i)-iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta))*100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta));

2.


問題は、インジケータがすぐにヒストリを逆方向に描画し、パラメータを変更してもリセットされないことです。

一番面白いのは、スポーツの面白さに目覚めて、インジケーターに30分も座っていたことです。

なぜ履歴が計算されなかったのでしょうか?
答えは、割り算の演算を追加したことです。

100/iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta)

iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE ,i+Delta) 関数が履歴の一番最初に0を返すことは考慮されていない。そして、0 で割ろうとするとエラー 4013 (ERR_ZERO_DIVIDE) で「追い出される」ので、ログを確認してみてください。

FORループにもう1つチェックを入れてもよい。

if(iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta) == 0)continue;

そして、すべてがうまくいく。以下、私のバリエーションです。

#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LimeGreen

double AUD;

extern int PerAvr=5,Delta=1;
double Idx[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         | 
//+------------------------------------------------------------------+
int init(){
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
   SetIndexBuffer(0,Idx);
//----
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){ 
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;   
   for(int i=limit; i>=0; i--){
      double a = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE, i);
      double b = iMA("AUDUSD",0,PerAvr,0,MODE_LWMA,PRICE_CLOSE,i+Delta);      
      if(b == 0)continue;      
      AUD=((a-b)*100/b);
      Idx[i] = AUD;
   }
}
//+------------------------------------------------------------------+


 

#プロパティ indicator_color1 白

start()モジュールで、このパラメータをプログラム的に変更することは可能でしょうか?

つまり、プログラムの進行に応じて、バッファに設定されている色を変更することは可能でしょうか?



 
valenok2003:

#プロパティ indicator_color1 白

start()モジュールで、このパラメータをプログラム的に変更することは可能でしょうか?

つまり、プログラムの進行に応じて、バッファに設定されている色を変更することは可能でしょうか?




そんなことはないだろう。そして、なぜそうしなければならないのか?