yquem ha scritto:però si risparmia sullo zafferano in quello alla milanese.
saluti
funes ha scritto:Ho convertito REGOLO B in linguaggio Easylanguage per Tradestation (versione 2000i).
Un paio di osservazioni:
1) Ho privilegiato innanzitutto la leggibilità del codice, a scapito forse di una conversione puntuale del sistema originale per Excel.
Questo a giovamento di quanti vogliano studiarlo per comprenderne i punti di forza (o debolezza), ed è oltremodo evidente che il primo passo per migliorare un sistema è comprenderne in pieno il funzionamento
2) Ho notato un'incoerenza logica nel codice. Da quel che ho capito il canale IDC ha funzione di filtro per i segnali generati dagli altri due indicatori, ovvero se, per esempio, il canale IDC viene bucato (BreakOut) allora si controlla se MACD e KC "vanno dalla stessa parte": se verso l'alto (+1 nel mio codice) allora long, se verso il basso (-1 nel mio codice) allora short.
Ora, abbiamo che potremmo avere un breakout verso il basso dell'IDC e contemporaneamente MACD = KC = +1 e avremmo comunque un segnale long. Ciò sembra in contraddizione con la logica che vorrebbe come prerequisisto per un segnale long SOLO un breakout verso l'alto dell'IDC.
Allora ho provato a riscrivere il codice trasformando l'indicatore IDC in modo da indicarmi non semplicemente la presenza di un breakout o meno (false = no breakout, true = breakout) ma anche la direzione dello stesso (0 = no breakout, +1 = up breakout, -1 = down breakout) e chiedere che il long venga generato solo se MACD = KC = IDC = +1 e lo short solo se MACD = KC = IDC = -1.
Pensavo di ottenere risultati equivalenti (esisteva la possibilità che non si verificassero mai contemporaneamente - nella "realtà" dei dati storici - le condizioni le condizioni IDC = -1 AND MACD = KC = 1, o le condizioni speculari per lo short), in tal caso i risultati sarebbero stati sovrapponibili. In realtà si ottiene un peggioramento EVIDENTE dei risultati (un disastro insomma ...).
Questo mi porta a concludere che il filtro IDC faccia inconsapevolmente, o comunque in maniera poco ortodossa, da filtro per la volatilità, non avendo alcun valore (se non peggiorativo) la conoscenza della direzione con cui si esce dal canale.
Mi piacerebbe a riguardo un commento di quanti l'hanno sviluppato.
Buona serata a tutti,
Funes
REGOLO B
Input: ChSmooth(10),
IDCSmooth(35),
IDCFactor(1.35),
KCFactor(0.95),
XAvgFast(13),
XAvgSlow(23),
XAvgDiff(9);
Vars: AvgHigh(0),
AvgLow(0),
AvgClose(0),
MidValue(0),
Spread(0),
IDCUpper(0),
IDCLower(0),
IDCPrice(0),
KCUpper(0),
KCLower(0),
KCPrice(0),
FastEMA(0),
SlowEMA(0),
DiffEMA(0),
KCdir(0),
MACDdir(0),
BreakOut(false);
{-------- common channels calculations -----------}
AvgHigh = Average(High, ChSmooth);
AvgLow = Average(Low, ChSmooth);
MidValue = (AvgHigh + AvgLow)/2;
Spread = (AvgHigh - AvgLow)/2;
{----------------- IDC filter --------------------}
IDCUpper = MidValue + Spread*IDCFactor;
IDCLower = MidValue - Spread*IDCFactor;
IDCPrice = Average(Close, IDCSmooth);
if IDCPrice < IDCLower or IDCPrice > IDCUpper
then BreakOut = true
else BreakOut = false;
{---------------- KC direction -------------------}
KCUpper = MidValue + Spread*KCFactor;
KCLower = MidValue - Spread*KCFactor;
KCPrice = Close;
if KCPrice > KCUpper then KCdir = +1
else
if KCPrice < KCLower then KCdir = -1;
{--------------- MACD direction ------------------}
FastEMA = XAverage(Close, XAvgFast);
SlowEMA = XAverage(Close, XAvgSlow);
DiffEMA = XAverage(FastEMA - SlowEMA, XAvgDiff);
if FastEMA - SlowEMA > DiffEMA
then MACDdir = +1
else MACDdir = -1;
{--------------- trading rules -------------------}
if BreakOut and MACDdir = KCdir
then begin
if MACDdir = +1 then buy next bar at Open
else
if MACDdir = -1 then sell next bar at Open;
end;
funes ha scritto:Ho convertito REGOLO B in linguaggio Easylanguage per Tradestation (versione 2000i).
Un paio di osservazioni:
1) Ho privilegiato innanzitutto la leggibilità del codice, a scapito forse di una conversione puntuale del sistema originale per Excel.
Questo a giovamento di quanti vogliano studiarlo per comprenderne i punti di forza (o debolezza), ed è oltremodo evidente che il primo passo per migliorare un sistema è comprenderne in pieno il funzionamento
2) Ho notato un'incoerenza logica nel codice. Da quel che ho capito il canale IDC ha funzione di filtro per i segnali generati dagli altri due indicatori, ovvero se, per esempio, il canale IDC viene bucato (BreakOut) allora si controlla se MACD e KC "vanno dalla stessa parte": se verso l'alto (+1 nel mio codice) allora long, se verso il basso (-1 nel mio codice) allora short.
Ora, abbiamo che potremmo avere un breakout verso il basso dell'IDC e contemporaneamente MACD = KC = +1 e avremmo comunque un segnale long. Ciò sembra in contraddizione con la logica che vorrebbe come prerequisisto per un segnale long SOLO un breakout verso l'alto dell'IDC.
Allora ho provato a riscrivere il codice trasformando l'indicatore IDC in modo da indicarmi non semplicemente la presenza di un breakout o meno (false = no breakout, true = breakout) ma anche la direzione dello stesso (0 = no breakout, +1 = up breakout, -1 = down breakout) e chiedere che il long venga generato solo se MACD = KC = IDC = +1 e lo short solo se MACD = KC = IDC = -1.
Pensavo di ottenere risultati equivalenti (esisteva la possibilità che non si verificassero mai contemporaneamente - nella "realtà" dei dati storici - le condizioni le condizioni IDC = -1 AND MACD = KC = 1, o le condizioni speculari per lo short), in tal caso i risultati sarebbero stati sovrapponibili. In realtà si ottiene un peggioramento EVIDENTE dei risultati (un disastro insomma ...).
Questo mi porta a concludere che il filtro IDC faccia inconsapevolmente, o comunque in maniera poco ortodossa, da filtro per la volatilità, non avendo alcun valore (se non peggiorativo) la conoscenza della direzione con cui si esce dal canale.
Mi piacerebbe a riguardo un commento di quanti l'hanno sviluppato.
Buona serata a tutti,
Funes
REGOLO B
Input: ChSmooth(10),
IDCSmooth(35),
IDCFactor(1.35),
KCFactor(0.95),
XAvgFast(13),
XAvgSlow(23),
XAvgDiff(9);
Vars: AvgHigh(0),
AvgLow(0),
AvgClose(0),
MidValue(0),
Spread(0),
IDCUpper(0),
IDCLower(0),
IDCPrice(0),
KCUpper(0),
KCLower(0),
KCPrice(0),
FastEMA(0),
SlowEMA(0),
DiffEMA(0),
KCdir(0),
MACDdir(0),
BreakOut(false);
{-------- common channels calculations -----------}
AvgHigh = Average(High, ChSmooth);
AvgLow = Average(Low, ChSmooth);
MidValue = (AvgHigh + AvgLow)/2;
Spread = (AvgHigh - AvgLow)/2;
{----------------- IDC filter --------------------}
IDCUpper = MidValue + Spread*IDCFactor;
IDCLower = MidValue - Spread*IDCFactor;
IDCPrice = Average(Close, IDCSmooth);
if IDCPrice < IDCLower or IDCPrice > IDCUpper
then BreakOut = true
else BreakOut = false;
{---------------- KC direction -------------------}
KCUpper = MidValue + Spread*KCFactor;
KCLower = MidValue - Spread*KCFactor;
KCPrice = Close;
if KCPrice > KCUpper then KCdir = +1
else
if KCPrice < KCLower then KCdir = -1;
{--------------- MACD direction ------------------}
FastEMA = XAverage(Close, XAvgFast);
SlowEMA = XAverage(Close, XAvgSlow);
DiffEMA = XAverage(FastEMA - SlowEMA, XAvgDiff);
if FastEMA - SlowEMA > DiffEMA
then MACDdir = +1
else MACDdir = -1;
{--------------- trading rules -------------------}
if BreakOut and MACDdir = KCdir
then begin
if MACDdir = +1 then buy next bar at Open
else
if MACDdir = -1 then sell next bar at Open;
end;
yquem ha scritto:su tradersite.it c'è un tutorials che fa al caso vostro.
se non siete iscritti mandatemi un mp che vi mando il file.
ciao
wdgigi ha scritto:yquem ha scritto:su tradersite.it c'è un tutorials che fa al caso vostro.
se non siete iscritti mandatemi un mp che vi mando il file.
ciao
Grazie mille. Trovato il sito e registrato. Non capisco come mai però mi da il segnale di errore con Word not reconized by Easylanguage.
Se inserisco in "signal" la prima parte fino a "commom channel cal" tutto ok. Poi da "common channell.." mi dà l'errore.
Io intanto provo e riprovo fino a far scoppiare il pc in attesa di un'aiuto quanto mai gradito, grazie.
Bye.