Como executarvirtual stop ou take?

 

Olá pessoal, 


Alguém saberia informar como posso acessar o tick do momento sem necessidade em esperar o fechamento do candle para executar


- Pretendo criar um virtual stop/take, onde se o preço chegar nela, neste mesmo momento ele execute?

Outra questão seria:

- Uma vez que não estou usando o time do candle para analisar o fechamento, como faço para abrir uma posição a cada candle?
- - Tenho uma opção para abertura de de posição porem ao chegar no sinal ele executa múltiplas posições. 


Então para entrar numa posição preciso que seja candle a candle usando seu fechamento.

E Para Stop/Take fechar posição ao chegar no preço, independe se fechar o candle.


Obrigado pessoal.

 
marcelodelta:

Olá pessoal, 


Alguém saberia informar como posso acessar o tick do momento sem necessidade em esperar o fechamento do candle para executar. 


- Pretendo criar um virtual stop/take, onde se o preço chegar nela, neste mesmo momento ele execute?

Outra questão seria:

- Uma vez que não estou usando o time do candle para analisar o fechamento, como faço para abrir uma posição a cada candle?
- - Tenho uma opção para abertura de de posição porem ao chegar no sinal ele executa múltiplas posições. 


Então para entrar numa posição preciso que seja candle a candle usando seu fechamento.

E Para Stop/Take fechar posição ao chegar no preço, independe se fechar o candle.


Obrigado pessoal.

Oi Marcelo,
Para fazer 1 posição por candle, coloque no IF:

Primeiro crie uma variável global datatime, vamos chamá-la de ultimaBarra;

A condição if seria a seguinte:

If(ultimaBarra != iTime(Symbol(), 0, 0)){
    If(condição para compra ok){
        executa a compra;
         ultimaBarra = iTime(Symbol(), 0, 0);
    }
    .. faça o mesmo if para condição de venda.
}

Para fazer take ou stop virtual, faça um loop for, para analisar todas as posições abertas. Se a posição for de compra, faça o seguinte if:

If ( preço Bid ≥ pontos do tprofit){
    OrderClose(...se estiver no Mt4)
    ...se estiver no Mt5, inclua no escopo a biblioteca CTrade. E aí você chama ela assim:
    CTrade trade;
    trade.PositionClose(id da posição, 0);
}
If (preço Bid ≤ pontos do sloss)... O mesmo procedimento.

Para posições de venda, o mesmo procedimento, mas vc inverte a condição. Em vez de Bid, é Ask:

If (preço Ask ≤ pontos do tprofit)...

If(preço Ask ≥ pontos do sloss)....

É por esse caminho.
    
 
Robson Santos:
Oi Marcelo,
Para fazer 1 posição por candle, coloque no IF:

Primeiro crie uma variável global datatime, vamos chamá-la de ultimaBarra;

A condição if seria a seguinte:

If(ultimaBarra != iTime(Symbol(), 0, 0)){
    If(condição para compra ok){
        executa a compra;
         ultimaBarra = iTime(Symbol(), 0, 0);
    }
    .. faça o mesmo if para condição de venda.
}

Para fazer take ou stop virtual, faça um loop for, para analisar todas as posições abertas. Se a posição for de compra, faça o seguinte if:

If ( preço Bid ≥ pontos do tprofit){
    OrderClose(...se estiver no Mt4)
    ...se estiver no Mt5, inclua no escopo a biblioteca CTrade. E aí você chama ela assim:
    CTrade trade;
    trade.PositionClose(id da posição, 0);
}
If (preço Bid ≤ pontos do sloss)... O mesmo procedimento.

Para posições de venda, o mesmo procedimento, mas vc inverte a condição. Em vez de Bid, é Ask:

If (preço Ask ≤ pontos do tprofit)...

If(preço Ask ≥ pontos do sloss)....

É por esse caminho.
    

Muito obrigado pela atenção. 


As entradas candle a candle esta funcionando. 


Com relação as saídas o Bid e Ask seria com:


double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); 

double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); 


?

 
marcelodelta:

Muito obrigado pela atenção. 


As entradas candle a candle esta funcionando. 


Com relação as saídas o Bid e Ask seria com:


double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); 

double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); 


?

Exato é isso mesmo, aí vc tem que obter a diferença entre o preço de abertura da posição - preço atual, dividido pelo ticksize, para saber quantos pontos o mercado andou, para cima ou para baixo da posição. Dá para fazer assim também. Price open - price current / Symbol tick size.
 
Robson Santos:
Exato é isso mesmo, aí vc tem que obter a diferença entre o preço de abertura da posição - preço atual, dividido pelo ticksize, para saber quantos pontos o mercado andou, para cima ou para baixo da posição. Dá para fazer assim também. Price open - price current / Symbol tick size.

Obrigado Robson. 


No caso price current onde posso ter esses dados?

Symbol tick size seria o ASk/Bid?


Uma outra observação

Qual a diferença entre 

trade.Buy/trade.Sell para trade.PositionOpen ?

 
marcelodelta:

Obrigado Robson. 


No caso price current onde posso ter esses dados?

Symbol tick size seria o ASk/Bid?


Uma outra observação

Qual a diferença entre 

trade.Buy/trade.Sell para trade.PositionOpen ?

se lesse a documentação ia entender!
 
algotrading_anonimo:
se lesse a documentação ia entender!

=)

 

Obrigado Robson. 


Funcionou perfeitamente.  Grato pela paciência e atenção.

Razão: