Resposta

Arredondamento de ordens de parada do Ninjatrader Problem

8 respostas

xlhuang1995

Assinante, bbp_participante, comunidade, 11 respostas.

Perfil da visita

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.

 

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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.

0

xlhuang1995

Assinante, bbp_participante, comunidade, 11 respostas.

Perfil da visita

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?

0

mabi

Cliente, bbp_participant, comunidade, 261 respostas.

Perfil da visita

8 anos atrás #136706

"O StrategyQuant agora oferece suporte total à plataforma de negociação NinjaTrader™!" ??

0

kazex

Cliente, bbp_participante, comunidade, 6 respostas.

Perfil da visita

7 anos atrás #143048

Tenho exatamente o mesmo problema. Qual é a modificação necessária no SQManagedStrategy para corrigi-lo?

 

Obrigado.

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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.

0

mabi

Cliente, bbp_participant, comunidade, 261 respostas.

Perfil da visita

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.

0

kazex

Cliente, bbp_participante, comunidade, 6 respostas.

Perfil da visita

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

0

tomas262

Administrador, sq-ultimate, 2 respostas.

Perfil da visita

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

0

Visualizando 8 respostas - 1 até 8 (de um total de 8)