Comparar números reais (o dobro) com a igualdade rigorosa não é a melhor coisa a fazer com eles. É mais correto comparar sua diferença com o valor máximo permitido.
Caros especialistas, a pergunta sobre o indicador foi removida, a solução veio de forma inesperada, eu dupliquei os cálculos, e oops.... Tudo está funcionando.
Mas eu tenho outro, como funcionou, gostaria de entender. O código está anexado:
//---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //----
//---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int i,n;
Retirado. Eu inventei todo tipo de bobagem. Acabou sendo muito mais simples. Eu tirei a variável Stark da função de início, para que ela não fosse reinicializada a cada tick.
Mas o que acontece quando esta COMPRA não é fechada, e a próxima COMPRA, etc., é aberta.
Este SELLSTOP que é definido primeiro tem que ser de alguma forma calculado a fim de fechá-lo depois que a primeira COMPRA tiver sido fechada.
Além disso, se o preço quebrar o pendente e depois fechar sem perda, o pendente foi fixado no mesmo lugar que seu predecessor.
-----------------------------------
istonão resolverá o problema porque depois que a venda for fechada, uma nova venda com um mestre diferente seráaberta e será apagada.
Depois de fechar a compra, não sei como.
int i, k=OrdersTotal(),ti;
for (i=0; i<k; i++){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderType()== OP_SELLSTOP){
ti = OrderMagicNumber(); }
if(OrderType()== OP_BUY)
if(OrderTicket()==ti) что дальше не пойму, как узнать о наличии ордера бай с нужным тикетом?
Osinal "sig1"é dado , o comando BUY é acionado e o pedido de SELLSTOP é colocado abaixo do pedido de BUY.
Quando a posição BUY é fechada, o SELLSTOP também é apagado.
Mas o que acontece quando esta COMPRA não é fechada, e a próxima COMPRA, etc., é aberta.
Este SELLSTOP que é definido primeiro tem que ser de alguma forma calculado a fim de fechá-lo depois que a primeira COMPRA tiver sido fechada.
Além disso, se o preço quebrar o pendente e depois fechar sem perda, o pendente foi fixado no mesmo lugar que seu predecessor.
-----------------------------------
istonão resolverá o problema porque depois que a venda for fechada, uma nova venda com um mestre diferente seráaberta e será apagada.
depois que a compra é fechada, não sei como.
Bem... você usa o mesmo Select para verificar...
int i, k=OrdersTotal(), ti, tid;
for (i=0; i<k; i++){
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderType()== OP_SELLSTOP) {
tid = OrderTicket(); // запомним тикет ордера селлстоп - если его придётся удалить...
ti = OrderMagicNumber();
// ищем ордер по тикету
if (OrderSelect(ti, SELECT_BY_TICKET)==true) {
// проверяем Закрылся ли этот ордер - это твоя Байка
if (OrderCloseTime() > 0) {
// удаляем ордер Селлстоп - если связанная с ним байка Закрылась...
OrderDelete(tid);
}
}
}
}
}
Aleksander: você está tendo muitas idéias... acredite em mim, você está fazendo besteira... não perca seu tempo... seu martingale não funciona tão facilmente...
Por favor, informe o que fazer se:
No testador está funcionando bem, tudo de acordo com o planejado, mas no realsk não abre a transação.
P.S. Realmente precisa de alguma ajuda, é uma questão de vida ou morte
foi substituído por MODE_TRADES?Eu não sou um especialista, talvez haja um problema?
O que há de errado com minha matemática?
Meu preço atual >= profitLine significa que se profitLine == ou >, certo?
Mas funciona para mim se > em pelo menos um ponto.
Você já olh ou as FAQ?
Sim, bem... não pensei nisso. Obrigado (risos)
Caros especialistas, a pergunta sobre o indicador foi removida, a solução veio de forma inesperada, eu dupliquei os cálculos, e oops.... Tudo está funcionando.
Mas eu tenho outro, como funcionou, gostaria de entender. O código está anexado:
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow
extern int PerMa = 5;
extern int Shift = 0;
extern int Step = 15;
double ABuf45[],ABuf[],ABuf5[],ABuf15[];//,Stark[];
double Stark;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{ Stark=0;
//---- indicators
// IndicatorBuffers(4);
SetIndexBuffer(0,ABuf);
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int i,n;
//----
i=Bars-counted_bars-1;
while(i>=0)
{ RefreshRates();
//----
double Ma15=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,i);
double Ma45=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,i);
double Ma=iMA(NULL,0,PerMa,0,MODE_EMA,PRICE_CLOSE,i);
//double Ma1=iMA(NULL,0,PerMa,Shift,MODE_EMA,PRICE_CLOSE,i+1);
if(Ma>Stark+Step*Point&&Ma15>Ma45){Stark=Ma;}
if(Ma<Stark-Step*Point&&Ma15<Ma45){Stark=Ma;}//else{Stark=Stark;}
ABuf[i+Shift]=Stark;Comment(Stark);
if(Ma>Stark+Step*Point&&Ma15>Ma45){Stark=Ma;}//else{Stark=Stark;}
if(Ma<Stark-Step*Point&&Ma15<Ma45){Stark=Ma;}//else{Stark=Stark;}
ABuf[i+Shift]=Stark;//Comment(Stark);
//----
i--;
}
return(0);
}
Retirado. Eu inventei todo tipo de bobagem. Acabou sendo muito mais simples. Eu tirei a variável Stark da função de início, para que ela não fosse reinicializada a cada tick.
Osinal "sig1"é dado , o comando BUY é acionado e o pedido de SELLSTOP é colocado abaixo do pedido de BUY.
Quando a posição BUY é fechada, o SELLSTOP também é apagado.
Mas o que acontece quando esta COMPRA não é fechada, e a próxima COMPRA, etc., é aberta.
Este SELLSTOP que é definido primeiro tem que ser de alguma forma calculado a fim de fechá-lo depois que a primeira COMPRA tiver sido fechada.
Além disso, se o preço quebrar o pendente e depois fechar sem perda, o pendente foi fixado no mesmo lugar que seu predecessor.
-----------------------------------
istonão resolverá o problema porque depois que a venda for fechada, uma nova venda com um mestre diferente seráaberta e será apagada.
Depois de fechar a compra, não sei como.
Osinal "sig1"é dado , o comando BUY é acionado e o pedido de SELLSTOP é colocado abaixo do pedido de BUY.
Quando a posição BUY é fechada, o SELLSTOP também é apagado.
Mas o que acontece quando esta COMPRA não é fechada, e a próxima COMPRA, etc., é aberta.
Este SELLSTOP que é definido primeiro tem que ser de alguma forma calculado a fim de fechá-lo depois que a primeira COMPRA tiver sido fechada.
Além disso, se o preço quebrar o pendente e depois fechar sem perda, o pendente foi fixado no mesmo lugar que seu predecessor.
-----------------------------------
istonão resolverá o problema porque depois que a venda for fechada, uma nova venda com um mestre diferente seráaberta e será apagada.
depois que a compra é fechada, não sei como.
Bem... você usa o mesmo Select para verificar...
você está tendo muitas idéias... acredite em mim, você está fazendo besteira... não perca seu tempo... seu martingale não funciona tão facilmente...