Comprar stop Vender stop Grid conselheiro como uma classe - página 2

 

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                     |
//+------------------------------------------------------------------+

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.

 
George Merts:

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                               |
//+------------------------------------------------------------------+

ComprarStopSellStopGrid 1.002

Até o momento, temos tais deficiências:

  1. em cada tic, a quantidade de posições e ordens pendentes é verificada
  2. 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
  3. 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...
 
Vladimir Karputov:

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:

  1. em cada tic, a quantidade de posições e ordens pendentes é verificada
  2. 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
  3. 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.

 
Ibragim Dzhanaev:

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:

//+------------------------------------------------------------------+
//| 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:

  1. Qual é a melhor maneira de aumentar as posições (cálculo do volume do lote)?
  2. O que fazer com posições opostas...

 
George Merts:

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.


 
Posso me juntar a vocês?
 

Ou assim vai.


 
Artiom Morochin:
Posso me juntar a vocês?

Feito. Conectar o Armazém, atualizar os arquivos do projeto a partir do Armazém.