Ben de 2013'te benzer bir algoritma uygulamaya çalıştım... Doğru, 7 gösterge kullandım ve Zigzag NN'nin öğrenme vektörünü oluştururdu. Ama öz aynı - ben ters pozisyonlar arıyordum ... ne göstergelerden gelen verilerden ne de onlardan gelen ticaret sinyallerinden iyi bir şey gelmedi ... kazara kalıplara rastlayana kadar. Bu da aracımı kökten değiştirdi. Şimdi algoritmam daha basit:
1. Geçen yıl için dakika ve saat zaman dilimlerinde kalıpların hesaplanması;
2. Bir dönüm noktası sözlüğünün derlenmesi ("dakika düzeni - saat düzeni" çiftleri);
3. Dönüş noktaları sözlüğüne göre NS öğretimi (150-160 çift için);
İşte yaklaşımımın sonucu:
Yaklaşımımın dezavantajlarına:
1) Yüksek TS riski - kırılma fiyatının değerini doğru bir şekilde belirlemek imkansız olduğundan, TS lotlu 9 bekleyen emir verir: 1, 1, 3, 6, 14, 31, 70, 158, 355;
2) Çıkış algoritmasını (TS trolünü) uygulamak zordur;
Yani NN ticaret için kullanılabilir, ancak soru NN'ye ne öğretileceğidir...
P/s: kalıplarla, A. Merrill'in (M & W) kalıplarını kastediyorum.
Akıllı yaklaşım. Ve kalıplar, gerçek fiyat deltasını hesaba katmadan sadece çubukların matristeki konumu olarak tanımlandı - sadece göreceli konum mu?
Gösterge modellerini denemek için bir fikrim var, ancak farklı bir çerçeveyle - son 5 göstergedeki göstergelerin ilk beş çubuğunu ve trend analizi için iki göstergeyi analiz ediyoruz - 10'luk artışlarla analiz ediyoruz ve aynı zamanda hesap mutlak değişiklikler.
Zig-zag hakkında mantıklı bir fikir, ancak düz yalpalardan tepe noktaları nasıl filtrelenebilir ki, bir trend değişikliğinin yanlış noktaları olabilir?
Akıllı yaklaşım. Ve kalıplar, gerçek fiyat deltasını hesaba katmadan sadece çubukların matristeki konumu olarak tanımlandı - sadece göreceli konum mu?
Gösterge modellerini denemek için bir fikrim var, ancak farklı bir çerçeveyle - son 5 göstergedeki göstergelerin ilk beş çubuğunu ve trend analizi için iki göstergeyi analiz ediyoruz - 10'luk artışlarla analiz ediyoruz ve aynı zamanda hesap mutlak değişiklikler.
Zig-zag hakkında mantıklı bir fikir, ancak düz yalpalardan tepe noktaları nasıl filtrelenebilir ki, bir trend değişikliğinin yanlış noktaları olabilir?
Bunu seviyorum:
Yalnızca kalıp çiftlerini depolayan dinamik bir dizi var (ben buna sözlük diyorum), sözlüğe ikinci kez bir çift kalıp girerse, onu yazmam; ve daha yüksek ve daha düşük olanın sayacının iki dizisi - sözlüğe yazılmamış olsa bile, kalıbın çift oluşumuna ne sıklıkta katıldığını sayarlar.
Öğrenme vektörünün oluşumu sözlüğe göre gerçekleşir, ayrı bir kalıbın ağırlığı = kalıp_sayıcı / maksimum_sayıcı. Onlar. çiftlerin oluşumunda en sık yer alan model 1'dir ve diğerlerinin tümü 1'den küçüktür. NN'yi eğittikten sonra elde edilen bir tablo:
Ana Desen
Ana Sayım
köle desen
Köle Sayısı
Sum_Multilayer_Perceptron
W2
on sekiz
W2
21
0.94914702
W14
on dört
W2
21
0.84972197
M15
20
M15
on dört
0,83269191
W1
on bir
W2
21
0.77499075
W13
on
W2
21
0.75006553
M15
20
M3
on
0.73813147
M15
20
M10
on
0.73812512
M15
20
M16
on
0.738099
W5
dokuz
W2
21
0.72506739
W10
dokuz
W2
21
0.72505412
M15
20
M11
dokuz
0,71431236
W2
on sekiz
W1
on bir
0.71204136
W2
on sekiz
W5
on bir
0.7118911
W4
sekiz
W2
21
0.70017271
W2
on sekiz
W4
on
0.68815217
W2
on sekiz
W7
on
0.68802818
M15
20
M7
7
0.66682395
M15
20
M14
6
0.64291215
W2
on sekiz
W13
sekiz
0.64045346
M3
12
M15
on dört
0.63254238
W9
5
W2
21
0.62522345
W3
5
W2
21
0.62509623
W7
5
W2
21
0.62505511
M15
20
M12
5
0,61917222
M15
20
M8
5
0.6191331
W14
on dört
W1
on bir
0.61210667
W6
4
W2
21
0.60012943
W2
on sekiz
W14
6
0,59301682
NS yapısı: Girişte 64 nöron, 4 dahili, 1 çıkış. Onlar. bir giriş nöronu bir modeli tanımlar. Şebeke 40-50 dakikada eğitilir, NN hatası 0.00001'i geçmez.
Böylece, daha önce sözlükte olmasa bile, kalıp çiftlerinin önemini tahmin edebilen bir modelim var.
Uzun zamandır düz ve yanlış tepelerle uğraşıyorum ama ZigZaga hesabı düzeyinde. Standart Zigzag kodunu biraz değiştirdim, yani bazında bir yüzde ZZ uyguladım. Şimdiye kadar, az ya da çok gerekli kod şöyle görünür:
int MyCExtremum::GetCombiZigzag(const double &high[], // буфер цен high
const double &low[], // буфер цен low
const datetime &time[], // буфер время
int ExtDepth, // глубина поиска экстремумов(первого прохода)
double ExtDeviation,// "пороговое значение": жесткая ступенька + % роста цены
int ExtBackstep // глубина поиска экстремумов(второго прохода)
)
{
//--- value
int shift=0, whatlookfor=0, lasthighpos=0, lastlowpos=0, Deviat=1;
double lasthigh=0.0, lastlow=0.0, percent=0.0;
int rates_total = ArraySize(time); // размер входных таймсерий
int limit = rates_total - ExtDepth; // лимит на расчеты...
Akıllı yaklaşım. Ve kalıplar, gerçek fiyat deltasını hesaba katmadan sadece çubukların matristeki konumu olarak tanımlandı - sadece göreceli konum mu?
Gösterge modellerini denemek için bir fikrim var, ancak farklı bir çerçeveyle - son 5 göstergedeki göstergelerin ilk beş çubuğunu ve trend analizi için iki göstergeyi analiz ediyoruz - 10'luk artışlarla analiz ediyoruz ve aynı zamanda hesap mutlak değişiklikler.
Zig-zag hakkında mantıklı bir fikir, ancak düz yalpalardan tepe noktaları nasıl filtrelenebilir ki, bir trend değişikliğinin yanlış noktaları olabilir?
Kalıpları kullanarak göstergelerin analizine gelince, bu çok ilginç ... Göstergelerde daha az gürültü olduğunu düşünüyorum, ancak bazılarının "düşük gürültüyü" ve diğerlerinin "yüksek gürültüyü" bastırması için göstergeler seçmeniz gerekiyor, o zaman bir çoklu filtre.
Yalnızca kalıp çiftlerini depolayan dinamik bir dizi var (ben buna sözlük diyorum), sözlüğe ikinci kez bir çift kalıp girerse, onu yazmam; ve daha yüksek ve daha düşük olanın sayacının iki dizisi - sözlüğe yazılmamış olsa bile, kalıbın çift oluşumuna ne sıklıkta katıldığını sayarlar.
Öğrenme vektörünün oluşumu sözlüğe göre gerçekleşir, ayrı bir kalıbın ağırlığı = kalıp_sayıcı / maksimum_sayıcı. Onlar. çiftlerin oluşumunda en sık yer alan model 1'dir ve diğerlerinin tümü 1'den küçüktür. NN'yi eğittikten sonra elde edilen bir tablo:
Ana Desen
Ana Sayım
köle desen
Köle Sayısı
Sum_Multilayer_Perceptron
W2
on sekiz
W2
21
0.94914702
W14
on dört
W2
21
0.84972197
M15
20
M15
on dört
0,83269191
W1
on bir
W2
21
0.77499075
W13
on
W2
21
0.75006553
M15
20
M3
on
0.73813147
M15
20
M10
on
0.73812512
M15
20
M16
on
0.738099
W5
dokuz
W2
21
0.72506739
W10
dokuz
W2
21
0.72505412
M15
20
M11
dokuz
0,71431236
W2
on sekiz
W1
on bir
0.71204136
W2
on sekiz
W5
on bir
0.7118911
W4
sekiz
W2
21
0.70017271
W2
on sekiz
W4
on
0.68815217
W2
on sekiz
W7
on
0.68802818
M15
20
M7
7
0.66682395
M15
20
M14
6
0.64291215
W2
on sekiz
W13
sekiz
0.64045346
M3
12
M15
on dört
0.63254238
W9
5
W2
21
0.62522345
W3
5
W2
21
0.62509623
W7
5
W2
21
0.62505511
M15
20
M12
5
0,61917222
M15
20
M8
5
0.6191331
W14
on dört
W1
on bir
0.61210667
W6
4
W2
21
0.60012943
W2
on sekiz
W14
6
0,59301682
NS yapısı: Girişte 64 nöron, 4 dahili, 1 çıkış. Onlar. bir giriş nöronu bir modeli tanımlar. Şebeke 40-50 dakikada eğitilir, NN hatası 0.00001'i geçmez.
Böylece, daha önce sözlükte olmasa bile, kalıp çiftlerinin önemini tahmin edebilen bir modelim var.
Uzun zamandır düz ve yanlış tepelerle uğraşıyorum ama ZigZaga hesabı düzeyinde. Standart Zigzag kodunu biraz değiştirdim, yani bazında bir yüzde ZZ uyguladım. Şimdiye kadar, az ya da çok gerekli kod şöyle görünür:
Bir dizi hakkında ilginç bir çözüm. Çiftler/dönemler arasında istatistiklerde herhangi bir fark var mı, olumlu bir tahmin sonucu veren bir kalıbın ortaya çıkma sıklığındaki değişkenliğin kararlılığı nedir?
Zigzag hakkında da bir yüzde çözümüm var, ancak referans zikzak segmentini hesaplamak için daha derin bir geçmiş kullanıyorum, bununla diğerlerindeki değişimi yüzde olarak karşılaştırıyorum.
Andrey Emelyanov : Kalıpları kullanarak göstergelerin analizine gelince, bu çok ilginç ... Göstergelerde daha az gürültü olduğunu düşünüyorum, ancak bazılarının "düşük gürültüyü" ve diğerlerinin "yüksek gürültüyü" bastırması için göstergeler seçmeniz gerekiyor, o zaman bir çoklu filtre.
Birçok farklı gösterge var. Standart osilatörlerle (ve faizsiz benzerlikleriyle) deneyler yaptım ve hepsinden kar etmeyi başardım - hepsi ayarlara bağlı... tek soru bunun bir tesadüf mü yoksa bir kalıp mı olduğu.
Комбинатор : Bu modelle sonuç almayı umuyor musunuz? İç katmanınız bir sınıflandırıcı değil, bir ara kompresör görevi görür.
64 girişten bir noktada (geçerli çubukta) sıkıştırmaya ihtiyacım var, sadece 2 giriş sıfırdan farklı... ve ağın görevi al/sat ile bölmek değil, Verilen girdiler için bir geri tepme olasılığını ölçün. Yoksa ben öyle konuşmuyor muyum?
Bir dizi hakkında ilginç bir çözüm. Çiftler/dönemler arasında istatistiklerde herhangi bir fark var mı, olumlu bir tahmin sonucu veren bir kalıbın ortaya çıkma sıklığındaki değişkenliğin kararlılığı nedir?
Zigzag hakkında da bir yüzde çözümüm var, ancak referans zikzak segmentini hesaplamak için daha derin bir geçmiş kullanıyorum, bununla diğerlerindeki değişimi yüzde olarak karşılaştırıyorum.
Herkesin bildiği gibi, A. Merrill'in kalıpları, kalıbın daha da gelişeceği (eğilimi sürdüreceği) veya başka bir kalıba geçeceği (fiyat toparlanması) konusunda kesin bir cevap vermez. Bu nedenle, bir saat ve bir dakikalık iki zaman dilimini kullanarak bir cevap aramaya karar verdim. Çiftlerin sıklığına ilişkin istatistikler topluyorum ve şu ana kadar evrensel bir öğrenme sözlüğüm yok. Ancak, bu bağlantının olması gerektiğinden eminim... aksi takdirde uyumlu desenler olmazdı: kelebekler, yarasalar vb.
Andrey Emelyanov : Herkesin bildiği gibi, A. Merrill'in kalıpları, kalıbın daha da gelişeceği (eğilimi sürdüreceği) veya başka bir kalıba geçeceği (fiyat toparlanması) konusunda kesin bir cevap vermez. Bu nedenle, bir saat ve bir dakikalık iki zaman dilimini kullanarak bir cevap aramaya karar verdim. Çiftlerin sıklığına ilişkin istatistikler topluyorum ve şu ana kadar evrensel bir öğrenme sözlüğüm yok. Ancak, bu bağlantının olması gerektiğinden eminim... aksi takdirde uyumlu desenler olmazdı: kelebekler, yarasalar vb.
Bir kişi tarafından görsel olarak "kelebekler, yarasalar vb" olarak algılanan modeller. sadece insan beyninde doğarlar ve bence bu faktör dikkate alınmalıdır - beyin için neyin gerekli olduğunu ve neyin algısında olmadığını anlamak için bu konuda bilişsel psikoloji çalışmak gerekir. desen, yani hangi hatalar kabul edilebilir ve hangileri değildir. Beyin genellikle görmeyi beklediği şeyi kendi kendine çizer - kalıp sözlüğü sınırlıdır, bu da benzer mum kombinasyonlarını tek bir resme koyduğu anlamına gelir, yani. gördüklerini açıklamak için kesin bir matematiksel model kullanmaz.
Bebeğim hala dilsiz, ama zaten bir şeyler biliyor.. Girişte 8 gösterge, 1 çıkış, örtülü katmanda 15 nöron. 2000 girdi vektörü, 10000 eğitim dönemi.
Genel olarak, bu zaten 3. veya 4., tüm sonuçlar yaklaşık olarak aynı. Bence öyle, daha fazla nörona ve bir girdi vektörüne ihtiyacımız var, ancak öğrenene kadar uzun bir süre bekleyin.
Yakalaması gereken modeli kabaca hayal ediyorum ve özellikle farklı TF'lerden göstergeleri aldım ve çıkışlara görünüşte anlamlı bilgiler verildi.
Ben de 2013'te benzer bir algoritma uygulamaya çalıştım... Doğru, 7 gösterge kullandım ve Zigzag NN'nin öğrenme vektörünü oluştururdu. Ama öz aynı - ben ters pozisyonlar arıyordum ... ne göstergelerden gelen verilerden ne de onlardan gelen ticaret sinyallerinden iyi bir şey gelmedi ... kazara kalıplara rastlayana kadar. Bu da aracımı kökten değiştirdi. Şimdi algoritmam daha basit:
1. Geçen yıl için dakika ve saat zaman dilimlerinde kalıpların hesaplanması;
2. Bir dönüm noktası sözlüğünün derlenmesi ("dakika düzeni - saat düzeni" çiftleri);
3. Dönüş noktaları sözlüğüne göre NS öğretimi (150-160 çift için);
İşte yaklaşımımın sonucu:
Yaklaşımımın dezavantajlarına:
1) Yüksek TS riski - kırılma fiyatının değerini doğru bir şekilde belirlemek imkansız olduğundan, TS lotlu 9 bekleyen emir verir: 1, 1, 3, 6, 14, 31, 70, 158, 355;
2) Çıkış algoritmasını (TS trolünü) uygulamak zordur;
Yani NN ticaret için kullanılabilir, ancak soru NN'ye ne öğretileceğidir...
P/s: kalıplarla, A. Merrill'in (M & W) kalıplarını kastediyorum.
Akıllı yaklaşım. Ve kalıplar, gerçek fiyat deltasını hesaba katmadan sadece çubukların matristeki konumu olarak tanımlandı - sadece göreceli konum mu?
Gösterge modellerini denemek için bir fikrim var, ancak farklı bir çerçeveyle - son 5 göstergedeki göstergelerin ilk beş çubuğunu ve trend analizi için iki göstergeyi analiz ediyoruz - 10'luk artışlarla analiz ediyoruz ve aynı zamanda hesap mutlak değişiklikler.
Zig-zag hakkında mantıklı bir fikir, ancak düz yalpalardan tepe noktaları nasıl filtrelenebilir ki, bir trend değişikliğinin yanlış noktaları olabilir?
Akıllı yaklaşım. Ve kalıplar, gerçek fiyat deltasını hesaba katmadan sadece çubukların matristeki konumu olarak tanımlandı - sadece göreceli konum mu?
Gösterge modellerini denemek için bir fikrim var, ancak farklı bir çerçeveyle - son 5 göstergedeki göstergelerin ilk beş çubuğunu ve trend analizi için iki göstergeyi analiz ediyoruz - 10'luk artışlarla analiz ediyoruz ve aynı zamanda hesap mutlak değişiklikler.
Zig-zag hakkında mantıklı bir fikir, ancak düz yalpalardan tepe noktaları nasıl filtrelenebilir ki, bir trend değişikliğinin yanlış noktaları olabilir?
Bunu seviyorum:
Yalnızca kalıp çiftlerini depolayan dinamik bir dizi var (ben buna sözlük diyorum), sözlüğe ikinci kez bir çift kalıp girerse, onu yazmam; ve daha yüksek ve daha düşük olanın sayacının iki dizisi - sözlüğe yazılmamış olsa bile, kalıbın çift oluşumuna ne sıklıkta katıldığını sayarlar.
Öğrenme vektörünün oluşumu sözlüğe göre gerçekleşir, ayrı bir kalıbın ağırlığı = kalıp_sayıcı / maksimum_sayıcı. Onlar. çiftlerin oluşumunda en sık yer alan model 1'dir ve diğerlerinin tümü 1'den küçüktür. NN'yi eğittikten sonra elde edilen bir tablo:
NS yapısı: Girişte 64 nöron, 4 dahili, 1 çıkış. Onlar. bir giriş nöronu bir modeli tanımlar. Şebeke 40-50 dakikada eğitilir, NN hatası 0.00001'i geçmez.
Böylece, daha önce sözlükte olmasa bile, kalıp çiftlerinin önemini tahmin edebilen bir modelim var.
Uzun zamandır düz ve yanlış tepelerle uğraşıyorum ama ZigZaga hesabı düzeyinde. Standart Zigzag kodunu biraz değiştirdim, yani bazında bir yüzde ZZ uyguladım. Şimdiye kadar, az ya da çok gerekli kod şöyle görünür:
int MyCExtremum::GetCombiZigzag(const double &high[], // буфер цен high
const double &low[], // буфер цен low
const datetime &time[], // буфер время
int ExtDepth, // глубина поиска экстремумов(первого прохода)
double ExtDeviation,// "пороговое значение": жесткая ступенька + % роста цены
int ExtBackstep // глубина поиска экстремумов(второго прохода)
)
{
//--- value
int shift=0, whatlookfor=0, lasthighpos=0, lastlowpos=0, Deviat=1;
double lasthigh=0.0, lastlow=0.0, percent=0.0;
int rates_total = ArraySize(time); // размер входных таймсерий
int limit = rates_total - ExtDepth; // лимит на расчеты...
//+---------------------------------------------------------------+
//| ОЧЕНЬ ВАЖНАЯ ПРОВЕРКА ВЛИЯЮЩАЯ НА КОРРЕКТНОСТЬ ВЫЧИСЛЕНИЙ! |
//+---------------------------------------------------------------+
if(ArrayIsSeries(high)) ArraySetAsSeries(high,false);
if(ArrayIsSeries(low)) ArraySetAsSeries(low,false);
if(ArrayIsSeries(time)) ArraySetAsSeries(time,false);
//+---------------------------------------------------------------+
//| ПРОВЕРКИ ВХОДНЫХ ПЕРЕМЕННЫХ |
//+---------------------------------------------------------------+
if(rates_total<20)
{
Print(__FUNCTION__," ERROR: the small size of the buffer.");
return(-1);
}
if(ExtDeviation<0 || ExtDeviation>100)
{
Print(__FUNCTION__," ERROR: Is\'not correct a Deviation. The value of Deviation should be in the interval [0..100].");
return(-1);
}
//--- Проверка: Depth and Backstep
if((ExtDepth < ExtBackstep)||(ExtDepth < 2))
{
Print(__FUNCTION__+" ERROR: Is\'not correct a Depth and Backstep. The value of Depth should be greater than Backstep.");
return(-1);
}
//--- готовим буфер ZigzagBuffer[]
if(ArraySize(ZigzagBuffer)>0) ArrayFree(ZigzagBuffer); // Удаляем старые данные
ArrayResize(ZigzagBuffer,rates_total, EXTREMUM_RESERVE);
ArrayFill(ZigzagBuffer,0,rates_total,0.0);
if(ArrayIsSeries(ZigzagBuffer)) ArraySetAsSeries(ZigzagBuffer, false);
//---
if(ArraySize(HighMapBuffer)>0) ArrayFree(HighMapBuffer); // Удаляем старые данные
ArrayResize(HighMapBuffer,rates_total, EXTREMUM_RESERVE);
ArrayFill(HighMapBuffer,0,rates_total,0.0);
if(ArrayIsSeries(HighMapBuffer)) ArraySetAsSeries(HighMapBuffer, false);
//---
if(ArraySize(LowMapBuffer)>0) ArrayFree(LowMapBuffer); // Удаляем старые данные
ArrayResize(LowMapBuffer,rates_total, EXTREMUM_RESERVE);
ArrayFill(LowMapBuffer,0,rates_total,0.0);
if(ArrayIsSeries(LowMapBuffer)) ArraySetAsSeries(LowMapBuffer, false);
//---
if(ArraySize(TimeBuffer)>0) ArrayFree(TimeBuffer); // Удаляем старые данные
ArrayResize(TimeBuffer, rates_total, EXTREMUM_RESERVE);
ArrayFill(TimeBuffer, 0, rates_total, 0);
if(ArrayIsSeries(TimeBuffer)) ArraySetAsSeries(TimeBuffer, false);
//--- корректировка Deviation
if(ExtDeviation < 1)
{
Deviat = 1;
}else
{
Deviat = (int)ExtDeviation;
}
//--- получаем "свежие" минимумы и максимумы
if(GetHighMapZigzag(high,ExtDepth,Deviat,ExtBackstep) < 0) return(0);
if(GetLowMapZigzag(low,ExtDepth,Deviat,ExtBackstep) < 0) return(0);
//--- final rejection
for(shift=ExtDepth;shift<rates_total;shift++)
{
switch(whatlookfor)
{
case Start: // search for peak or lawn
if(lastlow==0 && lasthigh==0)
{
if(HighMapBuffer[shift]!=0)
{
lasthigh=high[shift];
lasthighpos=shift;
whatlookfor=Sill;
ZigzagBuffer[shift]=lasthigh;
TimeBuffer[shift]=time[shift];
}
if(LowMapBuffer[shift]!=0)
{
lastlow=low[shift];
lastlowpos=shift;
whatlookfor=Pike;
ZigzagBuffer[shift]=lastlow;
TimeBuffer[shift]=time[shift];
}
}
break;
case Pike: // search for peak
if(LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)
{
//---
ZigzagBuffer[lastlowpos] = 0.0;
TimeBuffer[lastlowpos] = 0;
//---
lastlowpos=shift;
lastlow=LowMapBuffer[shift];
ZigzagBuffer[shift]=lastlow;
TimeBuffer[shift]=time[shift];
//--- Обязательно: покинуть switch
break;
}
//--- Обход "двойственности"
if(LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow)
{
//---
ZigzagBuffer[lastlowpos] = 0.0;
TimeBuffer[lastlowpos] = 0;
//---
lastlowpos=shift;
lastlow=LowMapBuffer[shift];
ZigzagBuffer[shift]=lastlow;
TimeBuffer[shift]=time[shift];
//--- Обязательно: покинуть switch
break;
}
if(HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
{
//--- Проверка: % роста цены
percent = (HighMapBuffer[shift]-lastlow)/(lastlow/100);
if(percent > ExtDeviation)
{
lasthigh=HighMapBuffer[shift];
lasthighpos=shift;
ZigzagBuffer[shift]=lasthigh;
TimeBuffer[shift]=time[shift];
whatlookfor=Sill;
}
percent = 0.0;
}
break;
case Sill: // search for lawn
if(HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)
{
//---
ZigzagBuffer[lasthighpos] = 0.0;
TimeBuffer[lasthighpos] = 0;
//---
lasthighpos=shift;
lasthigh=HighMapBuffer[shift];
ZigzagBuffer[shift]=lasthigh;
TimeBuffer[shift]=time[shift];
//--- Обязательно: покинуть switch
break;
}
if(HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh)
{
//---
ZigzagBuffer[lasthighpos] = 0.0;
TimeBuffer[lasthighpos] = 0;
//---
lasthighpos=shift;
lasthigh=HighMapBuffer[shift];
ZigzagBuffer[shift]=lasthigh;
TimeBuffer[shift]=time[shift];
//--- Обязательно: покинуть switch
break;
}
if(LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
{
//--- Проверка: % роста цены
percent = (lasthigh-LowMapBuffer[shift])/(lasthigh/100);
if(percent > ExtDeviation)
{
lastlow=LowMapBuffer[shift];
lastlowpos=shift;
ZigzagBuffer[shift]=lastlow;
TimeBuffer[shift]=time[shift];
whatlookfor=Pike;
}
percent = 0.0;
}
break;
default:
return(-1);
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
MyCextremum dosyasında - ZigZag hesaplamak için bir sınıf...
Akıllı yaklaşım. Ve kalıplar, gerçek fiyat deltasını hesaba katmadan sadece çubukların matristeki konumu olarak tanımlandı - sadece göreceli konum mu?
Gösterge modellerini denemek için bir fikrim var, ancak farklı bir çerçeveyle - son 5 göstergedeki göstergelerin ilk beş çubuğunu ve trend analizi için iki göstergeyi analiz ediyoruz - 10'luk artışlarla analiz ediyoruz ve aynı zamanda hesap mutlak değişiklikler.
Zig-zag hakkında mantıklı bir fikir, ancak düz yalpalardan tepe noktaları nasıl filtrelenebilir ki, bir trend değişikliğinin yanlış noktaları olabilir?
Andrey Emelyanov :
NS yapısı: Girişte 64 nöron, 4 dahili, 1 çıkış. Onlar. bir giriş nöronu bir modeli tanımlar.
Bunu seviyorum:
Yalnızca kalıp çiftlerini depolayan dinamik bir dizi var (ben buna sözlük diyorum), sözlüğe ikinci kez bir çift kalıp girerse, onu yazmam; ve daha yüksek ve daha düşük olanın sayacının iki dizisi - sözlüğe yazılmamış olsa bile, kalıbın çift oluşumuna ne sıklıkta katıldığını sayarlar.
Öğrenme vektörünün oluşumu sözlüğe göre gerçekleşir, ayrı bir kalıbın ağırlığı = kalıp_sayıcı / maksimum_sayıcı. Onlar. çiftlerin oluşumunda en sık yer alan model 1'dir ve diğerlerinin tümü 1'den küçüktür. NN'yi eğittikten sonra elde edilen bir tablo:
NS yapısı: Girişte 64 nöron, 4 dahili, 1 çıkış. Onlar. bir giriş nöronu bir modeli tanımlar. Şebeke 40-50 dakikada eğitilir, NN hatası 0.00001'i geçmez.
Böylece, daha önce sözlükte olmasa bile, kalıp çiftlerinin önemini tahmin edebilen bir modelim var.
Uzun zamandır düz ve yanlış tepelerle uğraşıyorum ama ZigZaga hesabı düzeyinde. Standart Zigzag kodunu biraz değiştirdim, yani bazında bir yüzde ZZ uyguladım. Şimdiye kadar, az ya da çok gerekli kod şöyle görünür:
Bir dizi hakkında ilginç bir çözüm. Çiftler/dönemler arasında istatistiklerde herhangi bir fark var mı, olumlu bir tahmin sonucu veren bir kalıbın ortaya çıkma sıklığındaki değişkenliğin kararlılığı nedir?
Zigzag hakkında da bir yüzde çözümüm var, ancak referans zikzak segmentini hesaplamak için daha derin bir geçmiş kullanıyorum, bununla diğerlerindeki değişimi yüzde olarak karşılaştırıyorum.
Kalıpları kullanarak göstergelerin analizine gelince, bu çok ilginç ... Göstergelerde daha az gürültü olduğunu düşünüyorum, ancak bazılarının "düşük gürültüyü" ve diğerlerinin "yüksek gürültüyü" bastırması için göstergeler seçmeniz gerekiyor, o zaman bir çoklu filtre.
Bu modelle sonuç almayı umuyor musunuz? İç katmanınız bir sınıflandırıcı değil, bir ara kompresör görevi görür.
Bir dizi hakkında ilginç bir çözüm. Çiftler/dönemler arasında istatistiklerde herhangi bir fark var mı, olumlu bir tahmin sonucu veren bir kalıbın ortaya çıkma sıklığındaki değişkenliğin kararlılığı nedir?
Zigzag hakkında da bir yüzde çözümüm var, ancak referans zikzak segmentini hesaplamak için daha derin bir geçmiş kullanıyorum, bununla diğerlerindeki değişimi yüzde olarak karşılaştırıyorum.
Herkesin bildiği gibi, A. Merrill'in kalıpları, kalıbın daha da gelişeceği (eğilimi sürdüreceği) veya başka bir kalıba geçeceği (fiyat toparlanması) konusunda kesin bir cevap vermez. Bu nedenle, bir saat ve bir dakikalık iki zaman dilimini kullanarak bir cevap aramaya karar verdim. Çiftlerin sıklığına ilişkin istatistikler topluyorum ve şu ana kadar evrensel bir öğrenme sözlüğüm yok. Ancak, bu bağlantının olması gerektiğinden eminim... aksi takdirde uyumlu desenler olmazdı: kelebekler, yarasalar vb.
Bebeğim hala dilsiz, ama zaten bir şeyler biliyor.. Girişte 8 gösterge, 1 çıkış, örtülü katmanda 15 nöron. 2000 girdi vektörü, 10000 eğitim dönemi.
Genel olarak, bu zaten 3. veya 4., tüm sonuçlar yaklaşık olarak aynı. Bence öyle, daha fazla nörona ve bir girdi vektörüne ihtiyacımız var, ancak öğrenene kadar uzun bir süre bekleyin.
Yakalaması gereken modeli kabaca hayal ediyorum ve özellikle farklı TF'lerden göstergeleri aldım ve çıkışlara görünüşte anlamlı bilgiler verildi.