StrategyQuant Estratégias não lucrativas ao codificá-las em C
8 respostas
Charles
5 anos atrás #237334
Recodifiquei as estratégias geradas pelo strategyquant no Zorro Trader, que usa C leve, e os resultados são da noite para o dia.
O SQ X mostra um lucro enorme, enquanto o Zorro está mostrando uma perda. A quantidade de negociações não chega nem perto e os dois sistemas estão usando os mesmos dados, pois exportei as velas diretamente da minha corretora por meio do Zorro.
A estratégia foi encontrada usando barras de 15 minutos do EURUSD e, quando codifiquei no Zorro para barras de 15 minutos, há 29.568 negociações contra 3902 do SQ. Mesmo que eu mude o Zorro para usar barras de 1H, ele ainda tem o dobro de negociações... resultando em 7154 negociações. Tanto o Zorro 15 min quanto o 60 min produzem retornos anuais (perdas) de -14% e -15%, respectivamente, enquanto o SQ X diz que todos os anos foram de ganhos e com enormes fatores de lucro.
Posso entender pequenas diferenças usando os mesmos dados, mas essas diferenças são enormes. A SQ está dizendo que é um sistema vencedor ano após ano, enquanto a Zorro está dizendo que está perdendo -14% por ano.
Por favor, informe.
Charles
5 anos atrás #237338
//--------------------------------------------------------------------
// Pseudocódigo-fonte da estratégia 0.850460
//
// Gerada pelo StrategyQuant X Build 115 para MetaTrader
// em 12/12/2018 01:03
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Parâmetros da estratégia
//--------------------------------------------------------------------
int MagicNumber = 11111;
Gráfico principal = Símbolo atual / TF atual
//--------------------------------------------------------------------
// Regra de negociação: Sinais de negociação (na abertura da barra)
//--------------------------------------------------------------------
LongEntrySignal = (CCI(Gráfico principal,30)[2] é maior que 25,0);
ShortEntrySignal = (CCI (gráfico principal, 30)[2] é menor que -25)
;
LongExitSignal = ((DeMarker(Gráfico principal,40) muda de direção para cima)
e (Williams % R(Gráfico principal,22) > -10,0));
ShortExitSignal = ((DeMarker(Gráfico principal,40) muda a direção para baixo)
e (Williams % R(Gráfico principal,22) < -90));
//--------------------------------------------------------------------
// Regra de negociação: Entrada longa (na abertura da barra)
//--------------------------------------------------------------------
se LongEntrySignal
{
// Ação #1
Abrir ordem longa no mercado;
Stop Loss = 2,3 * ATR(20);
Profit meta = 2,9 * ATR(20);
Sair após 18 barras;
}
//--------------------------------------------------------------------
// Regra de negociação: Entrada curta (na abertura da barra)
//--------------------------------------------------------------------
Se (ShortEntrySignal
and Not LongEntrySignal)
{
// Ação #1
Abrir ordem curta no mercado;
Stop Loss = 2,3 * ATR(20);
Profit meta = 2,9 * ATR(20);
Sair após 18 barras;
}
//--------------------------------------------------------------------
// Regra de negociação: Saída longa (na abertura da barra)
//--------------------------------------------------------------------
se ((LongExitSignal
e não for LongEntrySignal)
e (MarketPosition("Any", MagicNumber, "") for Long))
{
// Ação #1
Fechar a posição total para Symbol = Any e Magic Number = MagicNumber;
}
//--------------------------------------------------------------------
// Regra de negociação: Saída curta (na abertura da barra)
//--------------------------------------------------------------------
se ((ShortExitSignal
e não for ShortEntrySignal)
e (MarketPosition("Any", MagicNumber, "") for Short))
{
// Ação #1
Fechar a posição total para Symbol = Any e Magic Number = MagicNumber;
}
mabi
5 anos atrás #237340
Gostaria que isso fosse tão fácil, mas não é. Tentei fazer isso usando o SQ3 e o Ninjatrader, mas também não funcionou por vários motivos. Portanto, fique com o MT4 até que eles adicionem suporte ao Zorry ou você só perderá seu tempo.
Charles
5 anos atrás #237341
Recodifiquei muitas estratégias nos últimos dias e todas elas falharam.
O Zorro é bastante simples na codificação, pois a maioria das porcas e parafusos é feita para você. Portanto, não acho que seja um problema com o Zorro. Estou inclinado a pensar que o StrategyQuant não está gerando sinais falsos ou é impreciso.
Gostaria muito de receber feedback dos desenvolvedores e trabalhar para resolver isso!
Charles
5 anos atrás #237342
Acabei de passar a última hora recodificando uma estratégia diferente que tem regras muito simples e ela também falha.
//--------------------------------------------------------------------
// Pseudocódigo-fonte da estratégia 0.899785
//
// Gerada pelo StrategyQuant X Build 115 para MetaTrader
// em 14/12/2018 01:23
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Parâmetros da estratégia
//--------------------------------------------------------------------
int MagicNumber = 11111;
Gráfico principal = Símbolo atual / TF atual
//--------------------------------------------------------------------
// Regra de negociação: Sinais de negociação (na abertura da barra)
//--------------------------------------------------------------------
LongEntrySignal = (ADX DI Minus(Gráfico principal)[1] está subindo);
ShortEntrySignal = (ADX DI Minus(Gráfico principal)[1] está caindo);
LongExitSignal = false;
ShortExitSignal = falso;
//--------------------------------------------------------------------
// Regra de negociação: Entrada longa (na abertura da barra)
//--------------------------------------------------------------------
se LongEntrySignal
{
// Ação #1
Abrir ordem Longa em (Close(Main chart)[3] + (2 * ATR(Main chart,40)[1])) Stop;
Ordem válida por 1 barra;
Stop Loss = 75,0 pips;
Meta Profit = 195,0 pips;
Mover SL para BE = 135,0 pips;
Sair após 7 barras;
}
//--------------------------------------------------------------------
// Regra de negociação: Entrada curta (na abertura da barra)
//--------------------------------------------------------------------
Se (ShortEntrySignal
and Not LongEntrySignal)
{
// Ação #1
Abrir ordem curta em (Close(Main chart)[3] - (2 * ATR(Main chart,40)[1])) Stop;
Ordem válida por 1 barra;
Stop Loss = 75 pips;
Profit target = 195 pips;
Mover SL para BE = 135 pips;
Sair após 7 barras;
}
//--------------------------------------------------------------------
// Regra de negociação: Saída longa (na abertura da barra)
//--------------------------------------------------------------------
se ((LongExitSignal
e não for LongEntrySignal)
e (MarketPosition("Any", MagicNumber, "") for Long))
{
// Ação #1
Fechar a posição total para Symbol = Any e Magic Number = MagicNumber;
}
//--------------------------------------------------------------------
// Regra de negociação: Saída curta (na abertura da barra)
//--------------------------------------------------------------------
se ((ShortExitSignal
e não for ShortEntrySignal)
e (MarketPosition("Any", MagicNumber, "") for Short))
{
// Ação #1
Fechar a posição total para Symbol = Any e Magic Number = MagicNumber;
}
Charles
5 anos atrás #237343
Aqui está o código Zorro para quem quiser experimentar, o código SQ está acima. A estratégia SQ indica Sharpe de 4,12, fator Profit de 3,82. Não há anos perdidos. No entanto, quando eu executo no Zorro, ela tem um retorno anual de -18% PF 0,02 e um Sharpe de -0,69.
//--------------------------------------------------------------------
// Código-fonte da estratégia do Zorro 0.899785
//
//--------------------------------------------------------------------
function run()
{
StartDate = 2010;
EndDate = 2015; // período fixo de simulação 2010-2015
BarPeriod = 15; //
LookBack = 200;
MaxLong = MaxShort = 1;
//--------------------------------------------------------------------
// Regra de negociação: Sinais de negociação (na abertura da barra)
//--------------------------------------------------------------------
/*
ADX(int TimePeriod): var
Índice de movimento direcional médio. Média móvel do indicador DX (veja abaixo). Usa a série de preços do ativo atual. Não é compatível com o TimeFrame. Os valores retornados variam de 0 a 100.
*/
vars close = série ( priceClose() );
vars mDI = series( MinusDI( 14 ) );
var *atr = series( ATR( 40 ) );
bool LongEntrySignal ;
bool ShortEntrySignal;
bool LongExitSignal = false;
bool ShortExitSignal = false;
LongEntrySignal = mDI[1] > mDI[2];
ShortEntrySignal = mDI[1] < mDI[2];
//--------------------------------------------------------------------
// Regra de negociação: Entrada longa (na abertura da barra)
//--------------------------------------------------------------------
se ( LongEntrySignal )
{
LifeTime = 7;
EntryTime = 1;
Stop = 75 * PIP;
TakeProfit = 195 * PIP;
Trail = 135 * PIP;
TrailLock = 1 * PIP;
Entry = close[3] + ( 2 * atr[1] );
enterLong();
}
//--------------------------------------------------------------------
// Regra de negociação: Entrada curta (na abertura da barra)
//--------------------------------------------------------------------
Se ((ShortEntrySignal
e !LongEntrySignal))
{
// Ação #1
LifeTime = 7;
EntryTime = 1;
Stop = 75 * PIP;
TakeProfit = 195 * PIP;
Trail = 135 * PIP;
TrailLock = 1 * PIP;
Entry = close[3] - ( 2 * atr[1] );
enterShort();
}
plot("mDI", mDI, NEW, RED );
}
tníquel
5 anos atrás #237349
Anexe o arquivo *.sqx
Assim, podemos fazer um backtest no MT4 e comparar as negociações.
Se o strategyquant 4.x tiver um problema, o backtest do metatrader será diferente.
thomas
https://monitortool.jimdofree.com/
Charles
5 anos atrás #237351
Oi Tomas, em anexo está a última estratégia postada acima.
mabi
5 anos atrás #237390
Essa estratégia falha totalmente quando a testo no SQX. Verifique a qualidade ou as configurações de seus dados.
Visualizando 8 respostas - 1 até 8 (de um total de 8)