[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 291

 
Obrigado a todos! Eu descobri... Fiz isso primeiro sem o IndicatorBuffers(2); e não funcionou...
 

Ajude, por favor, tenha um conselheiro para romper os fractais. Eu peguei bons parâmetros só preciso acrescentar que ele estabelece muito martingale (mais 2 quando você perde). Ou dar o poder sobre o conselheiro só vai dobrar o lote sem esperar por 2 para correr (se disponível):

//+------------------------------------------------------------------+

|| Fractals.mq4 |

//| PARA |

//| http://www.forex-tradexperts-to.narod.ru |

//+------------------------------------------------------------------+

#propriedade copyright "TO

#link da propriedade "http://www.forex-tradexperts-to.narod.ru"





#incluir <WinUser32.mqh>.


externo int TP_Fract_3=300;

externo int SL_Fract_3=200;

externo int TP_Fract_11=500;

externo int SL_Fract_11=300;

external bool buy_Fract_3=true;

venda_Fracto_3=verdadeiro;

external bool buy_Fract_11=true;

venda_Fracto_11=verdadeiro;

podtvergdenie=false;

tofract=10;

lotes duplos externos=0,1;

ID int externo = 5452;


string com;

dupla propagação;


int init()

{

com=DoubleToStr(ID,0);

spread=MarketInfo(Symbol(),MODE_SPREAD)*Ponto;

retorno(0);

}


int deinit()

{

retorno(0);

}


data/hora t1,t2=0;


pedido de bool (preço duplo, tipo int, string c,int m)

{

int i;

for(i=OrdensTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==preço && OrderType()==tipo)return(false);

if(i==0)return(true);

}

if(OrdersTotal()==0)return(true);

}


int start()

{

int i,ret;

t1=Tempo[0];

if(t1!=t2)

{

int fract_buy_3=iHighest(Symbol(),Period(),MODE_HIGH,5,1);

int fract_sell_3=iLowest(Symbol(),Period(),MODE_LOW,5,1);

int fract_buy_11=iHighest(Symbol(),Period(),MODE_HIGH,21,1);

int fract_sell_11=iLowest(Symbol(),Period(),MODE_LOW,21,1);

if( fract_buy_3===3 && buy_Fract_3===verdadeiro)

{

if(OrderTotal()==0)if(order(order(high[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5);

for(i=OrdensTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()===com && OrderMagicNumber()==5 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_3]+tofract*Point+spread, High[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue);

pausa;

}

if(i==0)if(order(order(high[fract_buy_3]+tofract*Point+spread,4,com,5))

{

if(podtvergdenie)

{

ret=MessageBox("Signal at "+Symbol()+" H1 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);

}

}

}

if( fract_sell_3===3 && sell_Fract_3===verdadeiro)

{

if(OrderTotal()==0)if(order(Order(Low[fract_sell_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Baixo[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Baixo[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);

for(i=OrdensTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()===com && OrderMagicNumber()==5 && OrderType()==5)

{

OrderModify(OrderTicket(),Low[fract_sell_3]-tofract*Point,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,0,Red);

pausa;

}

if(i==0)if(order(Order(Low[fract_sell_3]-tofract*Point,5,com,5))

{

if(podtvergdenie)

{

ret=MessageBox("Sinal em "+Symbol()+"H1 SELLSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,5);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point*Point,com,5);

}

}

}

if( fract_buy_11==11 && buy_Fract_11===verdadeiro)

{

if(OrderTotal()==0)if(order(order(high[fract_buy_11]+tofract*Point+spread,4,com,21))orderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21);

for(i=OrdensTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()===com && OrderMagicNumber()==21 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue);

pausa;

}

if(i==0)if(order(order(high[fract_buy_11]+tofract*Point+spread,4,com,21))

{

if(podtvergdenie)

{

ret=MessageBox("Sinal em "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);

}

}

}

if( fract_sell_11==11 && sell_Fract_11===verdadeiro)

{

if(OrderTotal()==0)if(order(Order(Low[fract_sell_11]-tofract*Point,5,com,21))orderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Baixo[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Baixo[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21);

for(i=OrdensTotal()-1;i>=0;i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderComment()===com && OrderMagicNumber()==21 && OrderType()==5)

{

OrderModify(OrderTicket(),Low[fract_sell_11]-tofract*Point,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,0,Red);

pausa;

}

if(i==0)if(order(Order(Low[fract_sell_11]-tofract*Point,5,com,21))

{

if(podtvergdenie)

{

ret=MessageBox("Sinal em "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,21);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point*Point,com,21);

}

}

}

t2=Tempo[0];

}

retorno(0);

}

Eu sou ruim em escrever russo, desculpe!

 
AppaRat:

Eu não sou bom em escrever russo, desculpe!

Você nem sabe como inserir código. Não quero ler isto.
 

Diga-me quem pode ajudar com o bloco Klimov, o problema é que ele não devolve o valor do último fechado, mas o valor do último fechado pela condição

assim em 2 condições

bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

devolve ambos os valores Verdadeiro,

como fazê-la retornar apenas por última ordem fechada e não por última ordem condicional,

acrescentei muita verificação ao código para minha conveniência

//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1, int ll=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             if (ll<0 || OrderLots()==ll) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}



//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1, int ll=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
             if (ll<0 || OrderLots()==ll) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 
FoxUA:

Diga-me quem pode ajudar com o bloco Klimov, o problema é que ele não devolve o valor do último fechado, mas o valor do último fechado pela condição

assim em 2 condições

devolve ambos os valores Verdadeiro,

como fazê-la retornar apenas por última ordem fechada e não por última ordem condicional,

acrescentei muita verificação ao código para minha conveniência


Você adicionou o cheque de lotes a esta função? Agora eles verificam as últimas posições fechadas com o lote passado, e o lote é provavelmente sempre igual a zero, ou um inteiro. A variável deve ser do tipo duplo. Por que precisamos de muita verificação aqui, afinal?

Você escreve o que você quer alcançar, e eles lhe dirão :)

 

Sim, e por que o lote é um int? O lote sempre foi o dobro.

Você poderia fazer isso, quando ainda tiver uma ordem, determinar qual ordem é deixada e procurar a ordem oposta.

 
FoxUA:

Diga-me quem pode ajudar com o bloco Klimov...

Não duplique os postes em fios diferentes, é má forma.
 
artmedia70:

Verifique os lotes na função adicionados por você mesmo? Agora eles verificam as últimas posições fechadas com o lote passado, e o lote é provavelmente sempre igual a zero, ou um inteiro. A variável deve ser do tipo duplo. Por que precisamos de muita verificação aqui, afinal?

Você escreve o que você quer alcançar, e eles lhe dirão :)

Eu já consegui tudo, mas existe um bug, é em um certo momento uma ordem que eu não preciso aparecer,

Tentei mudá-lo para int, originalmente era o dobro, mas esqueci de devolvê-lo, e se eu usar uma função separada sem verificação de lote, o resultado não muda, então talvez eu não o tenha verificado corretamente, me ajude a entender o que está errado com este bug

este é o aspecto do pedido

вот так работает без проблем 
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop(NULL,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake(NULL,OP_SELL,MagBuy,LotC);

при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);

начинает возвращять True не по одному а по двум запросам 
BuyTakeLotB и BuystopLotA



 
Roger:

Sim, e por que o lote é um int? O lote sempre foi o dobro.

Você poderia fazer isso, quando ainda tiver uma ordem, determinar qual ordem é deixada e procurar a ordem oposta.


não é tão simples porque as condições de abertura podem ser 2 na venda, e então esta busca não vai encontrar nada
 
granit77:
Não duplique os postes em fios diferentes, é má forma.

Desculpe, vou me esforçar mais para lembrar de apagar os mesmos postes de fios diferentes,