コーディングのヘルプ - ページ 321

 

これは、私の写真の例のように、SSAに直接MAを適用しようとしたものです。

もちろん、私はコーディングに関しては全くの素人です.

だから、もし誰かが私が何を変えなければならないか教えてくれるなら、私はとても感謝します。

私はこの問題でnoobであっても、物事を解決するのが好きです。しかし、もし人が自分の問題を解決しようとしないなら、彼は永遠にnoobのままでしょう.

//+------------------------------------------------------------------+

//| FullSSA.mq4(フルサ)

//| 著作権 © 2007,klot

//|klot@mail.ru

//+------------------------------------------------------------------+

#property copyright "著作権 © 2007, klot"

#property link "klot@mail.ru"

#import "libSSA.dll" です。

void fastSingular(double& a[],int n,int lag ,int s,double&b[]);

#import

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 ホワイト

#property indicator_color2 ディープピンク

#property indicator_width1 3 (プロパティ インジケータ幅1)

#property indicator_level1 0.0

#property indicator_levelstyle STYLE_DASH (インジケーターレベルスタイル スタイルダッシュ

#property indicator_levelcolor マゼンタ

extern string note_TimeFrames ="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";

extern string TimeFrame = "現在のタイムフレーム";

extern int Lag = 10;

extern int NumComps = 2;

extern int PeriodNorm = 10;

extern int N = 1000;

extern int SSAMa_Mode = 3;

extern int MaPeriod = 5;

extern int Ma_Mode = 3; extern int MaPeriod = 5; extern int Ma_Mode = 3;

extern bool Interpolate = true;

double SSA[];

double ssaWork[];

double SSAma[];

double arryTimeSeries[];

文字列indicatorFileName;

bool returnBars;

bool calculateValue;

int timeFrame;

int init()

{

SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSAma); SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,Bars-N).SetIndexBufferを設定します。

indicatorFileName = WindowExpertName();

calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);

returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);

timeFrame = stringToTimeFrame(TimeFrame);

IndicatorShortName(timeFrameToString(timeFrame)+" FullSSA normalize correct");

return(0);

}

int deinit(){return(0);}。

int start()

{

double dev,ma;

int nmax, nmin;

int size = N;

if (size>Bars) size = Bars;

if (ArraySize(arryTimeSeries)!=サイズ)

{

ArrayResize(arryTimeSeries,size)。

ArrayResize(ssaWork,size)。

}

int limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars<0)戻り値(-1)。

if(counted_bars>0) counted_bars--;

limit=MathMin(Bars-counted_bars,Bars-1);

if (returnBars) { SSA[0] = limit+1; return(0); }.

if (計算値 || timeFrame==Period())

{

for( i=size-1; i>=0; i--)

{

ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i).となります。

if(dev==0) dev=0.1;

arryTimeSeries=(Close-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);

ObjectDelete("Sell "+Time).ObjectDelete("Buy "+Time);

ObjectDelete("Buy "+Time)を実行します。

}

fastSingular(arryTimeSeries,size,Lag,NumComps,ssaWork);

ArrayCopy(SSA,ssaWork);

nmax=ArrayMaximum(SSA,3,1)とする。

nmin=ArrayMinimum(SSA,3,1)とする。

if(nmax==2) {

ObjectCreate("Sell "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);

ObjectSet("Sell "+Time[0],OBJPROP_ARROWCODE,226)を実行します。

}

if(nmin==2) {

ObjectCreate("買い "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);

ObjectSet("Buy "+Time[0],OBJPROP_ARROWCODE,225)を実行します。

//----

return(0);

}

limit =MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,", "returnBars",0,0)*timeFrame/Period())).Bars-1,iCustom(NULL,timeFrame,indicatorFileName,", "returnBars",0,0)*timeFrame/Period());

for(i=limit; i>=0; i--)

for (i=limit; i>=0; i--) SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i).For (i=limit; i>=0; i--);

{

int y = iBarShift(NULL,timeFrame,Time)。

SSA =iCustom(NULL,timeFrame,indicatorFileName,"", "calculateValue",Lag,NumComps,PeriodNorm,N,0,y);

if (timeFrame <= Period() ||y==iBarShift(NULL,timeFrame,Time)) continue;

if (!Interpolate) continue;

datetime time = iTime(NULL,timeFrame,y);

for(int n = 1; i+n =time; n++) continue;

double factor = 1.0 / n;

for(int x = 1; x < n; x++)

{

SSA= x*factor*SSA + (1.0-x*factor)*SSA;

}

}

return(0);

}

//+------------------------------------------------------------------+

string sTfTable[] ={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};

int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//

//

//

//

int stringToTimeFrame(string tfs)

{

tfs = StringUpperCase(tfs);

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tfs==sTfTable || tfs==""+iTfTable)return(MathMax(iTfTable,Period()))=(iTfTable);

return(Period())。

}

文字列 timeFrameToString(int tf)

{

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tf==iTfTable) return(sTfTable);

return("");

}

//

//

//

//

//

文字列 StringUpperCase(string str)

{

文字列 s = str;

for (int length=StringLen(str)-1; length>=0; length--)

{

int tchar = StringGetChar(s, length);

if((tchar > 96 && tchar 223 && tchar < 256))

s = StringSetChar(s, length, tchar - 32);

else if(tchar > -33 && tchar < 0)

s = StringSetChar(s, length, tchar + 224);

return(s);

}

 
mladen:
スロープの変化については、次のようにしてみてください:[PHP]double current = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,0);double previous1 = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,1);double previous2 = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,2);if (current>previous1 && previous1);double prior1 = iCustom(Symbol(),0,20, "HMA_Russian_Color", 20,3,0,2)

Mladenありがとうございます!今私はExtmapbuffer、条件に2番を追加するのを忘れて把握した。

私はすでに注文の実行条件を持っているとして、 "アップトレンドである間 "買いまたは "Dntrendである間 "その後販売のための条件はどうなるでしょうか、傾きの変化に対してではありません。

ありがとうございました。

ダニエル

 

Mladenさんへ。

私は、"トレンドがある間 "ではなく、"スロープの正確な変化 "という条件が必要で、これを書きましたが、ダウントレンドで問題があります。アップトレンドの場合はうまくいっているようですが、ダウントレンドの場合は同じように問題があります。

if (current>previous1)

{

// アップトレンド

}

if (現在値<前1)

{

// 下降トレンド これは機能していない 売り注文を全く出さない...

}

 
Wulong10:
これは、私の写真の例のように、SSAに直接MAを適用しようとしたものです。

もちろん、私はコーディングには全く無縁の人間です.

だから、もし誰かが私が何を変えなければならないかを教えてくれるなら、私は非常に感謝します。

私はこの問題でnoobであっても、物事を解決するのが好きです。しかし、もし人が自分の問題を解決しようとしないなら、彼は永遠にnoobのままでしょう・・・。

//+------------------------------------------------------------------+

//| FullSSA.mq4(フルサ)

//| 著作権 © 2007,klot

//|klot@mail.ru

//+------------------------------------------------------------------+

#property copyright "著作権 © 2007, klot"

#property link "klot@mail.ru"

#import "libSSA.dll" です。

void fastSingular(double& a[],int n,int lag ,int s,double&b[]);

#import

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 ホワイト

#property indicator_color2 ディープピンク

#property indicator_width1 3 (プロパティ インジケータ幅1)

#property indicator_level1 0.0

#property indicator_levelstyle STYLE_DASH (インジケーターレベルスタイル スタイルダッシュ

#property indicator_levelcolor マゼンタ

extern string note_TimeFrames ="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";

extern string TimeFrame = "現在のタイムフレーム";

extern int Lag = 10;

extern int NumComps = 2;

extern int PeriodNorm = 10;

extern int N = 1000;

extern int SSAMa_Mode = 3;

extern int MaPeriod = 5;

extern int Ma_Mode = 3; extern int MaPeriod = 5; extern int Ma_Mode = 3;

extern bool Interpolate = true;

double SSA[];

double ssaWork[];

double SSAma[];

double arryTimeSeries[];

文字列indicatorFileName;

bool returnBars;

bool calculateValue;

int timeFrame;

int init()

{

SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSAma); SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,Bars-N).SetIndexBufferを設定します。

indicatorFileName = WindowExpertName();

calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);

returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);

timeFrame = stringToTimeFrame(TimeFrame);

IndicatorShortName(timeFrameToString(timeFrame)+" FullSSA normalize correct");

return(0);

}

int deinit(){return(0);}。

int start()

{

double dev,ma;

int nmax, nmin;

int size = N;

if (size>Bars) size = Bars;

if (ArraySize(arryTimeSeries)!=サイズ)

{

ArrayResize(arryTimeSeries,size)。

ArrayResize(ssaWork,size)。

}

int limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars<0)戻り値(-1)。

if(counted_bars>0) counted_bars--;

limit=MathMin(Bars-counted_bars,Bars-1);

if (returnBars) { SSA[0] = limit+1; return(0); }.

if (計算値 || timeFrame==Period())

{

for( i=size-1; i>=0; i--)

{

ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i).となります。

if(dev==0) dev=0.1;

arryTimeSeries=(Close-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);

ObjectDelete("Sell "+Time).ObjectDelete("Buy "+Time);

ObjectDelete("Buy "+Time)を実行します。

}

fastSingular(arryTimeSeries,size,Lag,NumComps,ssaWork);

ArrayCopy(SSA,ssaWork);

nmax=ArrayMaximum(SSA,3,1)とする。

nmin=ArrayMinimum(SSA,3,1)とする。

if(nmax==2) {

ObjectCreate("Sell "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);

ObjectSet("Sell "+Time[0],OBJPROP_ARROWCODE,226)を実行します。

}

if(nmin==2) {

ObjectCreate("買い "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);

ObjectSet("Buy "+Time[0],OBJPROP_ARROWCODE,225)を実行します。

//----

return(0);

}

limit =MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,", "returnBars",0,0)*timeFrame/Period())).Bars-1,iCustom(NULL,timeFrame,indicatorFileName,", "returnBars",0,0)*timeFrame/Period());

for(i=limit; i>=0; i--)

for (i=limit; i>=0; i--) SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i).For (i=limit; i>=0; i--);

{

int y = iBarShift(NULL,timeFrame,Time)。

SSA =iCustom(NULL,timeFrame,indicatorFileName,"", "calculateValue",Lag,NumComps,PeriodNorm,N,0,y);

if (timeFrame <= Period() ||y==iBarShift(NULL,timeFrame,Time)) continue;

if (!Interpolate) continue;

datetime time = iTime(NULL,timeFrame,y);

for(int n = 1; i+n =time; n++) continue;

double factor = 1.0 / n;

for(int x = 1; x < n; x++)

{

SSA= x*factor*SSA + (1.0-x*factor)*SSA;

}

}

return(0);

}

//+------------------------------------------------------------------+

string sTfTable[] ={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};

int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//

//

//

//

int stringToTimeFrame(string tfs)

{

tfs = StringUpperCase(tfs);

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tfs==sTfTable || tfs==""+iTfTable)return(MathMax(iTfTable,Period()))=(iTfTable);

return(Period())。

}

文字列 timeFrameToString(int tf)

{

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

if (tf==iTfTable) return(sTfTable);

return("");

}

//

//

//

//

//

文字列 StringUpperCase(string str)

{

文字列 s = str;

for (int length=StringLen(str)-1; length>=0; length--)

{

int tchar = StringGetChar(s, length);

if((tchar > 96 && tchar 223 && tchar < 256))

s = StringSetChar(s, length, tchar - 32);

else if(tchar > -33 && tchar < 0)

s = StringSetChar(s, length, tchar + 224);

return(s);

}

武龍10

画像が表示されません

添付していただけませんか?

 

すでに画像はアップしていたのですが、改めてご紹介します。

で、MT4からMAを取り出し、SSAに適用(最初のInd.データに適用)すると、MT4を開いたときはMAは問題なく見えるのですが、リアルタイムで実行すると、SSAに追従しなくなるんです。

これはM1でのみ起こることで、M5では問題なく実行されます。

画像で視覚的に説明する必要があります。

ありがとうございます。

ファイル:
ssa.png  72 kb
 
Wulong10:
画像はすでに投稿していましたが、ここに再度掲載します。

そこで、MT4からMAを取り出し、SSAに適用(最初のInd.データに適用)すると、MT4を開いたときはMAは問題なく見えますが、リアルタイムで実行すると、もうSSAに追従しません。

これはM1でのみ起こることで、M5では問題なく実行されます。

画像で視覚的に説明してください。

ありがとうございます。

SSAが再計算されることを忘れないでください。もしあなたが再計算されたすべてのSSAバーのMAを計算しないなら、それはSSAに従わなくなります。

 

OK、なぜM5で動作するのか理解できました。それは、MAの期間を1に設定し、M1では2に設定したからです...これで問題が解決するはずです。私のトレーディングシムでテストしてみましたが、完璧とは言えませんが、はるかに良いです

期間1では、MAはSSAに従うはずです。

しかし、どのように私はSSAのコードで直接MAを組み込むことができますか?そして、それはまた、すべてのSSAバーを再計算する必要があります...またはそれは可能ではありません?

 
Wulong10:
OK、今私はそれがM5で動作する理由を理解し、それは私がそこにMAの期間を1に設定し、M1で私はそれを2にしているからです...それは問題を解決するはずです。私のトレーディングシムでテストしましたが、完璧ではありませんが、ずっと良いです

ピリオド1では、MAはSSAに従うべきです。

しかし、どのように私はSSAのコードに直接MAを組み込むことができますか?そして、それはまた、すべてのSSAバーを再計算する必要があります...またはそれは可能ではありません?

武龍10

あなたのmq4ファイルも投稿していただけますか?

 

前回のリクエストは気にしないでください

移動平均を追加したバージョンはこちら:ssa__ma.mq4

ファイル:
ssa__ma.mq4  5 kb
ssa__ma.gif  75 kb
 

OK、ありがとうMladen、あなたは最高です!

今、テストする時間がありません、今晩は足がつきます。

今、私はどのようにそれを行うべきであるかを見ることができますので、私はそれを勉強した後、0.5パーセント無能になるだろう。