[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 217

 
DanLett:

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


Eu não sou um especialista, talvez haja um problema?

ОrderSelect(i,SELECT_BY_POS,MODE_TRADES)
foi substituído por MODE_TRADES?
 

O que há de errado com minha matemática?

int modOrder()
{
double currentPrice = Bid;
double currentStoploss = OrderStopLoss();
double profitLine=profitLine();
if (currentPrice >= profitLine)
  {
  OrderModify(getTicket(),0,currentStoploss+1*Point,0,0,Blue);
  }
  Alert("profit line ", profitLine);
  return (0);
}

Meu preço atual >= profitLine significa que se profitLine == ou >, certo?

Mas funciona para mim se > em pelo menos um ponto.

 
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.
 
olis: O que há de errado com minha matemática?
Você já olh ouas FAQ?
 
GaryKa:
Você já olh ou as FAQ?

Sim, bem... não pensei nisso. Obrigado (risos)
 
Gek34:

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.

 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) что дальше не пойму, как узнать о наличии ордера бай с нужным тикетом?

 
Top2n:

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);
             }
          } 
       }
    }
}
 
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...
 
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...
Yay...Obrigado)))) Como não pode ser fácil?