Kodlama yardımı - sayfa 321

 

Resmimdeki örnekte olduğu gibi, doğrudan SSA'ya bir MA uygulamaya çalışırken yaptığım şey buydu.

Tabii ki, kodlamada tam bir acemiyim ...

Bu yüzden eğer biri bana neyi değiştirmem gerektiğini söylerse çok minnettar olurum.

Bir şeyleri çözmeyi severim, bu konuda çaylak olsam da, insan sorunlarını çözmeye kalkmazsa, sonsuza kadar çaylak olarak kalır...

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

//| FullSSA.mq4 |

//| Telif Hakkı © 2007,klot |

//| klot@mail.ru |

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

#property telif hakkı "Telif hakkı © 2007, klot"

#özellik bağlantısı "klot@mail.ru"

#import "libSSA.dll"

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

#içe aktarmak

#özellik göstergesi_separate_window

#özellik göstergesi_tamponları 2

#özellik göstergesi_renk1 Beyaz

#özellik göstergesi_color2 DeepPink

#özellik göstergesi_width1 3

#özellik göstergesi_seviye1 0.0

#özellik göstergesi_levelstyle STYLE_DASH

#özellik göstergesi_levelcolor Macenta

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

extern string TimeFrame = "Geçerli zaman çerçevesi";

harici int Gecikme = 10;

harici int NumComps = 2;

harici int DönemNorm = 10;

harici int N = 1000;

harici int SSAMa_Mode = 3;

harici int MaPeriod = 5;

harici int Ma_Mode = 3;

extern bool Interpolate = true;

çift SSA[];

çift ssaWork[];

çift SSAma[];

double arryTimeSeries[];

dize göstergesiDosyaAdı;

bool dönüş Barları;

bool hesaplaDeğer;

int zaman çerçevesi;

int init()

{

SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSAma);SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,Bars-N);

göstergeDosyaAdı = WindowExpertName();

hesapValue = (TimeFrame=="hesaplaValue"); if(hesaplaDeğer) return(0);

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

timeFrame = stringToTimeFrame(TimeFrame);

GöstergeShortName(timeFrameToString(timeFrame)+ " FullSSA normalleştirme doğru");

dönüş(0);

}

int deinit(){return(0);}

int başlangıç()

{

çift dev, anne;

int nmaks, nmin;

int boyut = N;

if (boyut>Çubuk) boyut = Çubuk;

if (ArraySize(arryTimeSeries) != size)

{

ArrayResize(arryTimeSeries,boyut);

ArrayResize(ssaWork,boyut);

}

int limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=MathMin(Barlar-sayılan_barlar,Barlar-1);

if (returnBars) { SSA[0] = limit+1; dönüş(0); }

if (calculateValue || timeFrame==Period())

{

for( i=beden-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=(Kapat-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);

ObjectDelete("Sat"+Süre);

ObjectDelete("Satın Al"+Süre);

}

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

ArrayCopy(SSA,ssaWork);

nmax=ArrayMaximum(SSA,3,1);

nmin=DiziMinimum(SSA,3,1);

if(nmax==2) {

ObjectCreate("Sat"+Zaman[0],OBJ_ARROW,0,Zaman[0],Aç[0]);

ObjectSet("Sat"+Zaman[0],OBJPROP_ARROWCODE,226);

}

if(nmin==2) {

ObjectCreate("Satın Al"+Zaman[0],OBJ_ARROW,0,Zaman[0],Açık[0]);

ObjectSet("Satın Al"+Zaman[0],OBJPROP_ARROWCODE,225);

}

//----

dönüş(0);

}

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

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

(i=limit; i>=0; i--) için SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i);

{

int y = iBarShift(NULL,timeFrame,Zaman);

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

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

(!Interpolate) devam ederse;

tarihsaat saat = iTime(NULL,timeFrame,y);

for(int n = 1; i+n =zaman; n++) devam;

çift faktör = 1.0 / n;

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

{

SSA= x*faktör*SSA + (1.0-x*faktör)*SSA;

}

}

dönüş(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(dize tfs)

{

tfs = StringUpperCase(tfs);

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

if (tfs==sTfTable || tfs==""+iTfTable)dönüş(MathMax(iTfTable,Period()));

Dönüş süresi());

}

string timeFrameToString(int tf)

{

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

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

dönüş("");

}

//

//

//

//

//

string StringUpperCase(string str)

{

dizi s = dizi;

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

{

int tchar = StringGetChar(s, uzunluk);

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

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

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

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

}

İadeler);

}

 
mladen:
Eğim değişikliği için şuna benzer bir şey deneyin:[PHP]double current = iCustom(Symbol(),0,"HMA_Russian_Color",20,3,0,0);double önceki1 = iCustom(Symbol(),0,"HMA_Russian_Color", 20,3,0,1));double önceki2 = iCustom(Symbol(),0,"HMA_Russian_Color",20,3,0,2);if (geçerli>önceki1 && önceki1

Teşekkürler Mladen!!, şimdi koşullara 2 numaralı Extmapbuffer'ı eklemeyi unuttum.

Eğilim değişiklikleri için değil, emirler için uygulama koşullarım zaten varken "Uptrend iken" al veya "Dntrend iken" sonra sat koşulu nasıl olurdu?

Tekrar teşekkürler

Daniel

 

Sevgili Mladen,

tam eğim değişiminde değil, "trend iken" olma koşuluna ihtiyacım var, bu yüzden bunu yazdım ama düşüş trendiyle ilgili bir sorunum var, bu koşullar doğru mu? Yükseliş trendi için iyi çalışıyor gibi görünüyor... düşüş trendi için de aynı sorun yaşıyorum... Umarım bana yardımcı olabilirsiniz, teşekkürler.

if ( geçerli > önceki1 )

{

// yükseliş trendi

}

if ( şimdiki < önceki1 )

{

// düşüş trendi BU ÇALIŞMIYOR HİÇBİR SİPARİŞ SATIŞINI TETİKLEMİYOR...

}

 
Wulong10:
Resmimdeki örnekte olduğu gibi, doğrudan SSA'ya bir MA uygulamaya çalışırken yaptığım şey buydu.

Tabii ki, kodlamada tam bir acemiyim ...

Bu yüzden eğer biri bana neyi değiştirmem gerektiğini söylerse çok minnettar olurum.

Bir şeyleri çözmeyi severim, bu konuda çaylak olsam da, insan sorunlarını çözmeye kalkmazsa, sonsuza kadar çaylak olarak kalır...

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

//| FullSSA.mq4 |

//| Telif Hakkı © 2007,klot |

//| klot@mail.ru |

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

#property telif hakkı "Telif hakkı © 2007, klot"

#özellik bağlantısı "klot@mail.ru"

#import "libSSA.dll"

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

#içe aktarmak

#özellik göstergesi_separate_window

#özellik göstergesi_tamponları 2

#özellik göstergesi_renk1 Beyaz

#özellik göstergesi_color2 DeepPink

#özellik göstergesi_width1 3

#özellik göstergesi_seviye1 0.0

#özellik göstergesi_levelstyle STYLE_DASH

#özellik göstergesi_levelcolor Macenta

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

extern string TimeFrame = "Geçerli zaman çerçevesi";

harici int Gecikme = 10;

harici int NumComps = 2;

harici int DönemNorm = 10;

harici int N = 1000;

harici int SSAMa_Mode = 3;

harici int MaPeriod = 5;

harici int Ma_Mode = 3;

extern bool Interpolate = true;

çift SSA[];

çift ssaWork[];

çift SSAma[];

double arryTimeSeries[];

dize göstergesiDosyaAdı;

bool dönüş Barları;

bool hesaplaDeğer;

int zaman çerçevesi;

int init()

{

SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSAma);SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,Bars-N);

göstergeDosyaAdı = WindowExpertName();

hesapValue = (TimeFrame=="hesaplaValue"); if(hesaplaDeğer) return(0);

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

timeFrame = stringToTimeFrame(TimeFrame);

GöstergeShortName(timeFrameToString(timeFrame)+ " FullSSA normalleştirme doğru");

dönüş(0);

}

int deinit(){return(0);}

int başlangıç()

{

çift dev, anne;

int nmaks, nmin;

int boyut = N;

if (boyut>Çubuk) boyut = Çubuk;

if (ArraySize(arryTimeSeries) != size)

{

ArrayResize(arryTimeSeries,boyut);

ArrayResize(ssaWork,boyut);

}

int limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=MathMin(Barlar-sayılan_barlar,Barlar-1);

if (returnBars) { SSA[0] = limit+1; dönüş(0); }

if (calculateValue || timeFrame==Period())

{

for( i=beden-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=(Kapat-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);

ObjectDelete("Sat"+Süre);

ObjectDelete("Satın Al"+Süre);

}

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

ArrayCopy(SSA,ssaWork);

nmax=ArrayMaximum(SSA,3,1);

nmin=DiziMinimum(SSA,3,1);

if(nmax==2) {

ObjectCreate("Sat"+Zaman[0],OBJ_ARROW,0,Zaman[0],Aç[0]);

ObjectSet("Sat"+Zaman[0],OBJPROP_ARROWCODE,226);

}

if(nmin==2) {

ObjectCreate("Satın Al"+Zaman[0],OBJ_ARROW,0,Zaman[0],Açık[0]);

ObjectSet("Satın Al"+Zaman[0],OBJPROP_ARROWCODE,225);

}

//----

dönüş(0);

}

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

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

(i=limit; i>=0; i--) için SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i);

{

int y = iBarShift(NULL,timeFrame,Zaman);

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

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

(!Interpolate) devam ederse;

tarihsaat saat = iTime(NULL,timeFrame,y);

for(int n = 1; i+n =zaman; n++) devam;

çift faktör = 1.0 / n;

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

{

SSA= x*faktör*SSA + (1.0-x*faktör)*SSA;

}

}

dönüş(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(dize tfs)

{

tfs = StringUpperCase(tfs);

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

if (tfs==sTfTable || tfs==""+iTfTable)dönüş(MathMax(iTfTable,Period()));

Dönüş süresi());

}

string timeFrameToString(int tf)

{

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

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

dönüş("");

}

//

//

//

//

//

string StringUpperCase(string str)

{

dizi s = dizi;

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

{

int tchar = StringGetChar(s, uzunluk);

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

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

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

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

}

İadeler);

}

Wulong10

resmi göremiyorum

Lütfen ekler misiniz?

 

Resmi daha önce koymuştum ama yine burada.

Bu nedenle, MT4'ten bir MA aldığımda ve onu SSA'ya uyguladığımda (ilk veriye uygula), MT4'ü açtığımda MA iyi görünüyor, ancak gerçek zamanlı olarak çalıştığında artık SSA'yı izlemiyor .

Bu sadece M1'de olur, M5'te sorunsuz çalışır.

Resim görsel olarak açıklamalıdır.

Teşekkürler.

Dosyalar:
ssa.png  72 kb
 
Wulong10:
Resmi daha önce koymuştum ama yine burada.

Bu nedenle, MT4'ten bir MA aldığımda ve onu SSA'ya uyguladığımda (ilk veriye uygula), MT4'ü açtığımda MA iyi görünüyor, ancak gerçek zamanlı olarak çalıştığında artık SSA'yı izlemiyor .

Bu sadece M1'de olur, M5'te sorunsuz çalışır.

Resim görsel olarak açıklamalıdır.

Teşekkürler.

SSA'nın yeniden hesapladığını unutmayın. Yeniden hesaplanan tüm SSA çubuklarının MA'sını hesaplamazsanız, SSA'yı takip etmeyi bırakacaktır.

 

Tamam, şimdi anlıyorum, neden M5'te çalışıyor, çünkü orada MA'nın periyodunu 1'e ayarladım ve M1'de 2'ye ayarladım ....Bu sorunu çözmeli. Alım satım simülasyonumda test ettim, mükemmel değil ama çok daha iyi!

1. dönem ile MA, SSA'yı izlemelidir.

Ancak bir MA'yı doğrudan SSA koduna nasıl dahil edebilirim? Ve ayrıca tüm SSA çubuklarını yeniden hesaplamalıdır... yoksa bu mümkün değil mi?

 
Wulong10:
Tamam, şimdi anlıyorum, neden M5'te çalışıyor, çünkü orada MA'nın periyodunu 1'e ayarladım ve M1'de 2'ye ayarladım ....Bu sorunu çözmeli. Alım satım simülasyonumda test ettim, mükemmel değil ama çok daha iyi!

1. dönem ile MA, SSA'yı izlemelidir.

Ancak bir MA'yı doğrudan SSA koduna nasıl dahil edebilirim? Ve ayrıca tüm SSA çubuklarını yeniden hesaplamalıdır... yoksa bu mümkün değil mi?

Wulong10

Lütfen mq4 dosyanızı da gönderebilir misiniz (metni mql'ye kopyalamak neredeyse her zaman bazı sorunlara neden olur)?

 

Son isteği boşver

İşte hareketli ortalama eklenmiş bir sürüm: ssa__ma.mq4

Dosyalar:
ssa__ma.mq4  5 kb
ssa__ma.gif  75 kb
 

Tamam, teşekkürler Mladen, sen en iyisisin!

Şimdi test etmek için zamanım yok, bu akşam ayak, zamanı geldiğinde size sonucu bildireceğim.

Şimdi bunu nasıl yapmam gerektiğini de görebiliyorum, bu yüzden okuduktan sonra %0.5 daha az noob olacağım.