Arredondamento de ordens de parada do Ninjatrader Problem
8 respostas
xlhuang1995
8 anos atrás #114993
Eu estava executando o SQ e encontrei alguns bons candidatos para o EURUSD. Então, exportei essas estratégias para o ninjatrader, mas quando as testei no ninjatrader, elas não fizeram nenhuma negociação, com apenas algumas ordens de parada canceladas em 1,0000 para entrada (veja a captura de tela em anexo). Essas estratégias estavam todas usando ordens de entrada de parada.
No código, descobri que a SQ estava usando price = roundprice() para o preço de entrada. Então, adicionei Print(price) na próxima linha e ele imprimiu linhas de 1 quando executei o backtest novamente.
Em seguida, excluí roundprice() e deixei o preço sem arredondamento. Surpreendentemente, os preços foram arredondados corretamente de acordo com meu ticksize (mesmo sem roundprice()).
Em seguida, calculei roundprice() usando meu cérebro, de acordo com SQMangedStrategy, que também passou por round() e _round (), e obtive o preço correto. No entanto, a estratégia continuou me dando 1,00000 quando executei o backtest.
Isso não faz sentido algum. Não consigo entender por que ele continua me dando 1,00000 quando o preço correto deveria ser algo como 1,42365.
Aliás, meu ticksize era de 0,00005. Eu estava operando com a Interactive Brokers.
tomas262
8 anos atrás #136454
Tentei duplicar seu problema usando dados de futuros 6E (tamanho do tick 0,00005) e uma estratégia gerada aleatoriamente usando apenas ordem de limite, e o problema também ocorreu comigo. Nenhuma negociação foi executada, apenas ordens com preço limite de 1,0000. Mark dará uma olhada no que pode ser feito.
xlhuang1995
8 anos atrás #136613
Sim, acho que cheguei ao ponto. É um bug no SQManagedStrategy, uma estratégia importada para o NT pelo SQ.
Quando o NT está calculando quantas casas decimais existem no tamanho do tick, ele foi PROJETADO para dividir o tamanho do tick no ponto decimal. No meu exemplo, 0,00005 se torna 0 e 00005. Em seguida, ele pega o último e conta quantos dígitos existem.
No entanto, o tamanho do tique que o NT obtém e depois divide está em NOTAÇÃO CIENTÍFICA. Portanto, ele não pode realmente dividi-lo no ponto decimal porque não há ponto decimal em 5E10-5. E isso causa o problema.
Eu brinquei com o código no SQManagedStrategy e corrigi esse problema sozinho. Foi uma correção fácil, mas não consigo entender como os engenheiros da SQ puderam cometer um erro tão estúpido. E como as pessoas podem usar o SQ para gerar estratégias de forex com tamanho de tick pequeno para serem usadas no NT? Ou não há ninguém usando o SQ com o NT?
mabi
8 anos atrás #136706
"O StrategyQuant agora oferece suporte total à plataforma de negociação NinjaTrader™!" ??
kazex
7 anos atrás #143048
Tenho exatamente o mesmo problema. Qual é a modificação necessária no SQManagedStrategy para corrigi-lo?
Obrigado.
tomas262
7 anos atrás #143051
Olá,
Isso pode ajudar a resolver o problema
No NT, abra Tools -> Edit NinjaScript -> Edit Strategy, localize SQManagedStrategy e encontre o método Initialize().
Há uma linha:
string str = Instrument.MasterInstrument.TickSize.ToString(System.Globalization.CultureInfo.InvariantCulture).TrimEnd('0');
substitua-o por linha:
string str = Instrument.MasterInstrument.TickSize.ToString("##.#").TrimEnd('0');
e ele deverá começar a funcionar corretamente.
mabi
7 anos atrás #143078
Obrigado, Tomas. O que eu não entendo é por que o modelo no qual o SQ gera o código não é atualizado com isso.
kazex
7 anos atrás #143087
Olá,
Isso pode ajudar a resolver o problema
No NT, abra Tools -> Edit NinjaScript -> Edit Strategy, localize SQManagedStrategy e encontre o método Initialize().
Há uma linha:string str = Instrument.MasterInstrument.TickSize.ToString(System.Globalization.CultureInfo.InvariantCulture).TrimEnd('0');substitua-o por linha:
string str = Instrument.MasterInstrument.TickSize.ToString("##.#").TrimEnd('0');e ele deverá começar a funcionar corretamente.
Fiz a alteração, mas o problema continua ocorrendo, imprimi o preço e os valores parecem fazer sentido, mas algumas negociações entre o SQ e o NT são diferentes, isso não acontece com ordens de mercado, apenas com ordens de stop (ordem de entrada ou stop trailing).
Enviado do meu iPhone usando o Tapatalk
tomas262
6 anos atrás #143275
Envie-me o arquivo da estratégia STR para [email protected]. Preciso verificar por que isso acontece com sua estratégia, obrigado
Visualizando 8 respostas - 1 até 8 (de um total de 8)