Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1037

 
Tema97:

o que eu faço agora ??? tenho uma estratégia baseada em canais - existe alguma alternativa de substituição?

É claro que há. Calcule os valores, salve-os em uma matriz ou estrutura e use-os para sua EA. E você também pode desenhar os objetos a partir daí - os valores estão disponíveis.
 
Tema97:

o que eu faço agora ??? tenho uma estratégia baseada em canais - existe alguma alternativa de substituição?

O que há para construir? Consultar o indicador através do iCustom.
Para vender, você pode incorporar com#resource
 
Quero implementar o seguinte
a capacidade de adicionar diferentes prazos a UMA folha (em janelas diferentes, mas em uma folha)
Por favor, informe para onde ir e onde cavar?) é possível através do mql ou da WInApi?
talvez haja exemplos do artigo que não consegui encontrar(
 
kocunyc89:

por favor, ajude-me a corrigir isso! ele dá erro 'Void' - declaração sem tipo 36 4 e onde rearranjar ou escrever retorno?
//

Void OnTick() {

O vazio é escrito com uma letra minúscula em vez de maiúsculas. Veja, é uma cor diferente. Coloque o cursor sobre esta palavra e pressione F1 - muitas vezes isso ajuda.

Tantas mensagens de erro aparecem após a correção... Eu corrigi as mensagens de erro, mas verifique você mesmo a lógica

#property strict

bool Результат;

extern int   SL             = 200,      //Стоплосс в пунктах
             TStop          = 20,       //
             TStep          = 10,       //
             TP             = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0;       // лот, если 0, то динамический
extern double RiskPercentage =  50;      // % от депо на лот, если динамический
extern int    MaxOrders      = 6;        //Максимальное кол-во ордеров одного направления

//--------------------------------------------------------------------
int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;

string txt;
//--------------------------------------------------------------------
int init()
{
   if(Digits==3||Digits==5)
   {
      TStop *=10;
      TStep *=10;
      SL    *=10;
   }
   return(INIT_SUCCEEDED);
}


//--------------------------------------------------------------------
void OnTick()
{
  double Lot = Lots;
  int Ticket = 0;
  if (Lots==0)
  {
    double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
    double step   = MarketInfo(Symbol(), MODE_LOTSTEP);
    double account = AccountFreeMargin();
    double percentage = account*RiskPercentage/100;
  
    Lot = MathRound(percentage/margin/step)*step;
  
    if(Lot < minLot) Lot = minLot;

    if(Lot > maxLot)Lot = maxLot;
  }

  int buy=0,sell=0;
  for (int i=0; i<OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         tip=OrderType();
         if (tip==0) buy++;
         if (tip==1) sell++;
    }  
  }

  Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
  double TrPr=0,StLo=0;
  double L    = NormalizeDouble(Low[0], Digits);
  double L1   = NormalizeDouble(Low[1], Digits);
  double L2   = NormalizeDouble(Low[2], Digits);
  double L3   = NormalizeDouble(Low[3], Digits);

  double H   = NormalizeDouble(High[0],Digits);
  double H1  = NormalizeDouble(High[1],Digits);
  double H2  = NormalizeDouble(High[2],Digits);
  double H3  = NormalizeDouble(High[3],Digits);

  double O   = NormalizeDouble(Open[0], Digits);
  double O1  = NormalizeDouble(Open[1], Digits);
  double O2  = NormalizeDouble(Open[2], Digits);
  double O3  = NormalizeDouble(Open[3], Digits);

  double C   = NormalizeDouble(Close[0],Digits);
  double C1  = NormalizeDouble(Close[1],Digits);
  double C2  = NormalizeDouble(Close[2],Digits);
  double C3  = NormalizeDouble(Close[3],Digits);

                         //LONG
  if (buy<MaxOrders  && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
    if (Ticket==0)
    Print("Error BUY",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
      TimeBar=Time[0];
    }
  }

                                  //SHORT
  if (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
    if (Ticket==0)
    Print("Error SELL",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
      TimeBar=Time[0];
    }
  }

  Trailing();
}
//!!! куда передвинуть?   return(0);


void Trailing()
{
  for(int i=OrdersTotal() -1; i>=0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)
        {
          if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
          {
            if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
            {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
              Print("Ошибка модификации ордера на покупку");
            }
          }
        }

        if(OrderType()==OP_SELL)
        {
          if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
          {
            if((OrderStopLoss()> (Ask+(TStep+TStop)*Point))  || (OrderStopLoss()==0)  )
            {
              if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
                {
                        Print("Ошибка модификации ордера на продажу");
                }
            }
          }
        }
      }
    }
  }
}

 
LRA:

O vazio é escrito com uma letra minúscula, não com uma letra maiúscula grande. Veja se é uma cor diferente. Coloque o cursor sobre esta palavra e pressione F1 - muitas vezes isso ajuda.

Depois de consertar tantas mensagens de erro aparecem... Consertou as mensagens de erro, mas verifique você mesmo a lógica


Muito obrigado, senhor!

 
Olá, cavalheiros comerciantes! Eu escrevi um robô de sinalização baseado no código que coloquei acima. O robô gera sinais para opções quase com precisão, mas com uma defasagem de duas barras. O que devo mudar no código para produzir os mesmos resultados, mas duas barras mais cedo? Ou isso é impossível? Obrigado.
 
Você pode me aconselhar - Eu tenho um indicador personalizado - Canal - Eu preciso devolver o valor do limite superior do canal - como fazer isso ?
 
artmedia70:

A variável int contém exatamente o número de segundos desde 1970, enquanto a variável data/hora contém a data.

Se você precisar de uma determinada barra no histórico, então não importa como especificá-la - por data ou por número de segundos, em qualquer caso, a variável indicará o tempo de abertura desta barra em particular, independentemente da chegada de novos tiquetaques e da abertura de novas barras.

Muito obrigado, mas há mais um problema. Tenho indicador que tem função stat, esta função deve ser usada SOMENTE quando chega um novo sinal, mas este problema é contar com cada barra, fiz tudo e normalizei o doble em comparação, então acho que estou ferrado. Morto a noite inteira, alguém pode explicar o que está errado ???? O indicador no atache na linha 193 é uma chamada de função com uma condição, mas a condição não é atendida e a condição é contada na chegada de cada bar, já estou doente e cansado para encontrar o erro, caras ajudem por favor!!!!! Obrigado antecipadamente....
Arquivos anexados:
 

Descobri apenas agora que a função estatística é recalculada se o indicador for chamado de outro indicador, quando ambos estão no gráfico. Ou seja, uma vez calculado para si mesmo e a segunda vez para o indicador que o chama. O que é isso?

 

O seguinte é mostrado na figura. O comentário no topo é o valor do buffer no indicador principal no qual o cálculo ocorre, e a impressão (abaixo) é o mesmo buffer, mas apenas chamado em outro indicador e emitido na impressão. A diferença é significativa, MAS PORQUÊ!!!!!

o primeiro arquivo é o principal, o segundo chama o buffer a partir do primeiro....

Arquivos anexados: