O stronie:
Niniejsza strona gromadzi wskaźniki i inne kawałki kodu opublikowane w ramach tego serwisu związane z apletem do wykresów giełdowych ISPAG.
Implementacje niestandardowych wskaźników:
Awesome Oscillator / Elliott Wave Oscillator (
Pobierz kod)
Kod wskaźników:
Awesome Oscillator / Elliott Wave Oscillator
/* *** ISPAG - wskaźniki użytkownika *************************************** * * Awesome Oscillator / Elliott Wave Oscillator * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Wersja: 1.0.0 (2009-03-22) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Opis: * * Implementacja niestandardowego oscylatora (Awesome Oscillator lub * * inaczej Elliott Wave Oscillator) dla apletu ISPAG 9.5. * * * * Domyślne parametry: * * Param(1) = 5 * * Param(2) = 34 * * Param(3) = 14 * * * * Opis parametrów: * * Param(1) - liczba okresów szybkiej SMA * * Param(2) - liczba okresów wolnej SMA * * Param(3) - generowanie sygnałów kupna/sprzedaży na podstawie reguł: * * 4 = Saucer * * 8 = Twin Peaks * * 6 = Zero Line + Saucer * * 10 = Zero Line + Twin Peaks * * 12 = Saucer + Twin Peaks * * 14 = Zero Line + Saucer + Twin Peaks * * * * Wyjaśnienie sygnałów: * * http://www.metaquotes.net/techanalysis/indicators/awesome_oscillator * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (c) 2009 Division Logiciel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Aktualna wersja: http://blog.dvl.pl/snippets/ispag * * Kontakt z autorem: karol (na) dvl (kropka) pl * * ************************************************************************* */ /* ************************************************************************* * * Changelog: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + 2009-03-22 v1.0.0 * * - Pierwsze wydanie * * ************************************************************************* */ /* ************************************************************************* * * License: GPL v3 or later (http://www.gnu.org/licenses/gpl.txt) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This program is free software; you can redistribute it and/or modify it * * under the terms of the GNU General Public License as published by the * * Free Software Foundation; either version 3 of the License, or (at your * * option) any later version. * * * * This program is distributed in the hope that it will be useful, but * * WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * * Public License for more details. * * * * You should have received a copy of the GNU General Public License along * * with this program. If not, see <http ://www.gnu.org/licenses/>. * * ************************************************************************* */ /* ************************************************************************* * * Implementacja wskaźnika: * * ************************************************************************* */ /* Rysowanie wskaźnika - ze względu na brak histogramów w formie ciągłej */ var high = High(); var low = Low(); var median = CreateArray(high.length); for (var i=0; i<median .length; i++) { median[i] = (high[i] + low[i]) / 2; } var sma1 = SimpleAvg(median, Param(1)); var sma2 = SimpleAvg(median, Param(2)); var AO = CreateArray(median.length); for (var i=0; i<AO.length; i++) { AO[i] = sma1[i] - sma2[i]; } AddGraph(AO, 0); AddHorizLine(0); /* Generowanie sygnałów kupna/sprzedaży */ var zeroCross = 0; var saucer = 0; var twinPeaks = 0; /* Ustalenie pożądanego trybu generowania sygnałów */ switch (Param(3)) { case 2: zeroCross = 1; break; case 4: saucer = 1; break; case 8: twinPeaks = 1; break; case 6: zeroCross = 1; saucer = 1; break; case 10: zeroCross = 1; twinPeaks = 1; break; case 12: saucer = 1; twinPeaks = 1; break; case 14: zeroCross = 1; saucer = 1; twinPeaks = 1; break; } var lastHigh = 0; var lastLow = 0; var momentum = 1; /* Generowanie sygnałów, implementacja najprostsza/najczytelniejsza. * Przy dużej ilości obrabianych danych mogłaby się przydać optymalizacja * w paru miejscach. */ for (var i=0; i<AO.length; i++) { if (zeroCross || twinPeaks) { /* Zero Cross - przebicie poziomu 0 */ if (AO[i-1] * AO[i] < 0) { if (twinPeaks) { /* Twin Peaks - reset */ lastLow = 0; lastHigh = 0; momentum = 1; /* Twin Peaks - reset end */ } if (zeroCross) { if (AO[i] > 0) AddBuySignal(i); else AddSellSignal(i); } } } if (saucer) { /* Saucer - odwrócenie */ if (AO[i] > 0 && AO[i-1] > 0 && AO[i-2] > 0) { if (AO[i-2] < AO[i-3] && AO[i-1] < AO[i-2] && AO[i] > AO[i-1]) AddBuySignal(i); } if (AO[i] < 0 && AO[i-1] < 0 && AO[i-2] < 0) { if (AO[i-2] > AO[i-3] && AO[i-1] > AO[i-2] && AO[i] < AO[i-1]) AddSellSignal(i); } } if (twinPeaks) { /* Twin Peaks - mniejszy szczyt */ if (AO[i] < 0) { if (AO[i] > AO[i-1]) { if (momentum) { if (AO[i-1] > lastLow) AddBuySignal(i-1); lastLow = AO[i-1]; momentum = 0; } } else { momentum = 1; } } if (AO[i] > 0) { if (AO[i] < AO[i-1]) { if (momentum) { if (AO[i-1] < lastHigh) AddSellSignal(i-1); lastHigh = AO[i-1]; momentum = 0; } } else { momentum = 1; } } } } /*::~ EOF */






Recent Comments