Estou acrescentando funcionalidade aos poucos. Ao iniciar, se não houver posições e não houver ordens pendentes, são feitas ordens de parada pendentes. A descrição da versão é anexada ao arquivo de classe:
//+------------------------------------------------------------------+//| 1.001: |//| when starting, sets Buy stop and sell stop |//+------------------------------------------------------------------+
Interessante - a CBuyStopSellStopGrid::RefreshRates(void) verifica se há zero valores de asc-bid.
Esta situação é realmente possível?
Em geral, não há outras observações, o código é bastante transparente e claro.
Sim, isto é vida e tudo é possível aqui. Em geral, verifique os valores zero inseridos por causa do testador (foi há cerca de um ano: ao iniciar o primeiro t=few ticks o testador deu zeros).
Estou acrescentando funcionalidade aos poucos. Na OnTradeTransaction, se houver uma posição ("DEAL_ENTRY_IN"), removemos as ordens pendentes e estabelecemos duas ordens pendentes de parada novamente:
//+------------------------------------------------------------------+//| 1.001: |//| when starting, sets Buy stop and sell stop |//| 1.002: |//| OnTradeTransaction: if DEAL_ENTRY_IN delete all pending orders,|//| and, sets Buy stop and sell stop |//+------------------------------------------------------------------+
Até o momento, temos tais deficiências:
em cada tic, a quantidade de posições e ordens pendentes é verificada
Sem controle das operações comerciais (ordem pendente) - o Consultor Especialista não trata de situações se a ordem pendente não tiver sido colocada
Um conjunto de posições sem posições - esta situação não é tratada, ou seja, se tivermos, digamos, fechado uma posição de Compra e depois uma posição de Venda aberta...
Sim, isto é vida e tudo é possível. Em geral, a verificação para valores zero foi introduzida por causa do testador (houve um caso há cerca de um ano: ao iniciar os primeiros t=uns tiros, o testador deu zeros).
Estou acrescentando funcionalidade aos poucos. Na OnTradeTransaction, se houver uma posição ("DEAL_ENTRY_IN") removemos ordens pendentes e definimos duas novas ordens pendentes de parada:
Até agora, temos tais deficiências:
em cada tic, a quantidade de posições e ordens pendentes é verificada
Sem controle das operações comerciais (ordem pendente) - o Consultor Especialista não lida com situações se a ordem pendente não tiver sido colocada
Um conjunto de posições sem posições - por exemplo, a situação não é tratada, quando, digamos, abrimos uma posição Comprar, e depois uma posição Vender...
O algoritmo mostrado na captura de tela não vai funcionar. Para que o algoritmo funcione, você tem que fazer o seguinte:
Quando um sinal de compra é recebido, uma grade de pedidos de BUY STOP é colocada acima da altura da primeira vela. Abaixo do preço de fechamento, é feito um pedido de STOP de VENDA. As ordens devem ser fechadas não devido a lucro ou perda, mas devido a outro sinal. Com sinais mais ou menos sãos, este sistema sempre funcionará.
Esta é apenas uma variante; você pode fazer tudo de uma maneira diferente.
//+------------------------------------------------------------------+//| 1.001: |//| when starting, sets Buy stop and sell stop |//| 1.002: |//| OnTradeTransaction: if DEAL_ENTRY_IN delete all pending orders,|//| and, sets Buy stop and sell stop |//| 1.003: |//| OnTradeTransaction: DEAL_ENTRY_IN |//| DEAL_TYPE_BUY => ClosePositions(POSITION_TYPE_SELL) |//| DEAL_TYPE_SELL => ClosePositions(POSITION_TYPE_BUY) |//| PlacesXXXX: |//| "RefreshRates()" is now inside the "PlacesXXXX" |//| OnTradeTransaction: |//| a "while" loop for "PlacesXXXX" |//+------------------------------------------------------------------+
agora fecha TODAS as posições opostas quando uma posição é aberta.
A aquisição de preços atuais foi movida dentro das funções PlacesBuy e PlacesSell para proteger contra falhas e escorregamentos.
NaOnTradeTransaction os pedidos pendentes são colocados em um loop de tempo - por assim dizer, estamos batendo o servidor ao soco :) - Não é a melhor solução, mas ficará por enquanto.
Na verdade, agora podemos pensar:
Qual é a melhor maneira de aumentar as posições (cálculo do volume do lote)?
Estou acrescentando funcionalidade aos poucos. Ao iniciar, se não houver posições e não houver ordens pendentes, são feitas ordens de parada pendentes. A descrição da versão é anexada ao arquivo de classe:
ds
Interessante - a CBuyStopSellStopGrid::RefreshRates(void) verifica se há zero valores de asc-bid.
É realmente uma situação possível?
Em geral - sem mais observações, o código é bastante transparente e claro.
Interessante - a CBuyStopSellStopGrid::RefreshRates(void) verifica se há zero valores de asc-bid.
Esta situação é realmente possível?
Em geral, não há outras observações, o código é bastante transparente e claro.
Sim, isto é vida e tudo é possível aqui. Em geral, verifique os valores zero inseridos por causa do testador (foi há cerca de um ano: ao iniciar o primeiro t=few ticks o testador deu zeros).
Estou acrescentando funcionalidade aos poucos. Na OnTradeTransaction, se houver uma posição ("DEAL_ENTRY_IN"), removemos as ordens pendentes e estabelecemos duas ordens pendentes de parada novamente:
Até o momento, temos tais deficiências:
Sim, isto é vida e tudo é possível. Em geral, a verificação para valores zero foi introduzida por causa do testador (houve um caso há cerca de um ano: ao iniciar os primeiros t=uns tiros, o testador deu zeros).
Estou acrescentando funcionalidade aos poucos. Na OnTradeTransaction, se houver uma posição ("DEAL_ENTRY_IN") removemos ordens pendentes e definimos duas novas ordens pendentes de parada:
Até agora, temos tais deficiências:
O algoritmo mostrado na captura de tela não vai funcionar. Para que o algoritmo funcione, você tem que fazer o seguinte:
Quando um sinal de compra é recebido, uma grade de pedidos de BUY STOP é colocada acima da altura da primeira vela. Abaixo do preço de fechamento, é feito um pedido de STOP de VENDA. As ordens devem ser fechadas não devido a lucro ou perda, mas devido a outro sinal. Com sinais mais ou menos sãos, este sistema sempre funcionará.
Esta é apenas uma variante; você pode fazer tudo de uma maneira diferente.
Se os sinais forem mais ou menos sãos, tal sistema sempre funcionará.
Seria melhor escrever "se você comprar em baixa e vender em alta, você sempre terá lucro".
Quem argumenta? O problema é encontrar "sinais razoáveis".
Versão 1.003:
Na verdade, agora podemos pensar:
Uma maneira melhor seria escrever "se você comprar em baixa e vender em alta, você estará sempre em lucro".
Quem argumenta? O problema é encontrar "sinais razoáveis".
A opção mais simples e mais óbvia.
Ou assim vai.
Posso me juntar a vocês?
Feito. Conectar o Armazém, atualizar os arquivos do projeto a partir do Armazém.