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

 
favor informar porque as transações não abrem.... O código parece fazer sentido, mas simplesmente não se abre.
 
//+------------------------------------------------------------------+ 
  //| MACD ^^^.mq4 | 
  //| Copyright © 2011, MetaQuotes Software Corp. | 
  //| http://www.metaquotes.net | 
  //+------------------------------------------------------------------+ 
  #property copyright "Copyright © 2011, MetaQuotes Software Corp." 
  #property link "http://www.metaquotes.net" 

  extern int TP = 100; 
  extern int TS = 100; 
  extern int TF = 1; 
  extern double lots = 0.1; 
  int fast_ema = 5; 
  int slow_ema = 34; 
  int signal_period = 5; 
  int slip = 3; 
  int Magic = 1; 

 int total; 
 int ticket; //объявил тотал и тикет 

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert deinitialization function | 
  //+------------------------------------------------------------------+ 
  int deinit() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 
  int start() 
    { 
  //---- 
  
 CheckTicket();
 bool signal = signal_MACD(); 
 AnalyzeSignal(signal); 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 

 bool signal_MACD() 
  { 
    bool signal_MACD = false; 
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       } 
    } 
  } 

 void AnalyzeSignal(bool signal) 
  { 
    double MACD = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0);
    total = OrdersTotal();
    if(total < 0)
    {
      if(signal == true)
      {
         if(MACD > 0)
         {
                ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
                if(ticket>0) 
                { 
                    OrderSelect(ticket,SELECT_BY_TICKET); 
                    Print("открылись на покупку по цене:", OrderOpenPrice()); 
                } 
                else 
                { 
                    Print("открыться не удалось по причине:", GetLastError()); 
                    return(0); 
                } 
         }
         if(MACD < 0)
         {
               ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
               if(ticket>0) 
               { 
                   OrderSelect(ticket,SELECT_BY_TICKET); 
                   Print("открылись на продажу по цене:", OrderOpenPrice()); 
               } 
               else 
               { 
                   Print("открыться не удалось по причине:", GetLastError()); 
                   return(0); 
               } 
         }
         else
            return(0);
      }
    }
  }
  
void CheckTicket()
{
   if(OrderSelect(ticket,SELECT_BY_TICKET))
   {
      if(OrderCloseTime()>0)
      {
         ticket = 0;
      }
   }   
}
 

Este é um ponto que eu não posso montar, me ajude a criar:

Preciso definir um ponto de lucro zero para dois ou mais pedidos abertos em uma direção, por exemplo, comprar.

e adicionar lucro a este ponto e atribuí-lo a todas as ordens de compra em aberto.

E o lucro deve ser mostrado no gráfico, ou seja, deve ser visível.

Por exemplo, ao preço de 1500, abrimos a primeira ordem de compra

às 1600 abrimos a segunda ordem de compra.

seu ponto zero está em 1550 + (Take Profit = 20)

e aqui a primeira e a segunda ordem recebem um take profit de 1570, quando o preço atingir este nível, ambas as ordens serão fechadas,

e se o preço passar (salta) este nível, ele seguirá e fechará as ordens.

É muito importante manter registros de ordens de compra e venda simultaneamente e não interferir um com o outro. Você deve definir lucro separadamente para compra e lucro separadamente para venda, e somente quando duas ou mais ordens são abertas em uma única direção ao mesmo tempo.

 
CLAIN:
favor informar porque as transações não abrem.... O código parece fazer sentido, mas simplesmente não se abre.
Porque a OrdesTotal() nunca retorna um valor negativo.
 
Obrigado, bom ponto.... corrigido... mas os negócios ainda não se abrem.... o que fazer?
 
CLAIN:
Obrigado, bom ponto.... corrigido... mas os negócios ainda não se abrem.... o que fazer?


Provavelmente corrija a função signal_MACD().

Bem, que ela ainda estaria dando algo em troca.

 

Olá.

Você pode me dizer se eu escrevi as condições corretamente? ( Os parâmetros Fractal_point_up_buy e Fractal_point_down_buy são normalizados).

Agradecemos antecipadamente.

      Fractal_point_up_buy=TF1B;
      Flow_differential_buy=Fractal_point_up_buy-Bid;
      if (timf1s>timf2b && timf2s>timf2b && timf3s>timf2b && timf3s<timf1b)
       {
        Fractal_point_down_buy=TF3S;   
       }
      else
       {
        if (timf1s>timf2b && timf2s>timf2b && timf3s<timf2b && timf2s<timf1b)
         {
          Fractal_point_down_buy=TF2S;   
         }
        else
         {
          if (timf1s>timf2b && timf2s<timf2b && timf3s<timf2b && timf1s<timf1b)
          Fractal_point_down_buy=TF1S; 
         }     
       }
      Fractal_fibo_buy=100*Flow_differential_buy/(Fractal_point_up_buy-Fractal_point_down_buy);
 
belck:

Este é um ponto que eu não posso montar, me ajude a criar:

Preciso definir um ponto de lucro zero para dois ou mais pedidos abertos em uma direção, por exemplo, comprar.

e adicionar lucro a este ponto e atribuí-lo a todas as ordens de compra em aberto.

E o lucro deve ser mostrado no gráfico, ou seja, deve ser visível.

Por exemplo, ao preço de 1500, abrimos a primeira ordem de compra

às 1600 abrimos a segunda ordem de compra.

seu ponto zero está em 1550 + (Take Profit = 20)

e aqui a primeira e a segunda ordem recebem um take profit de 1570, quando o preço atingir este nível, ambas as ordens serão fechadas,

e se o preço passar (salta) este nível, ele seguirá e fechará as ordens.

É muito importante manter registros de ordens de compra e venda simultaneamente e não interferir um com o outro. Você deve definir lucro separadamente para compra e lucro separadamente para venda, e somente quando duas ou mais ordens são abertas em uma única direção ao mesmo tempo.


Para uma posição aberta em 1500, um take em 1570 estaria bem (se você não levar em conta o StopLevel), mas para uma posição aberta em 1600, um take em 1570 causaria um erro de 130 - paradas erradas. Afinal de contas, um Take não pode ser inferior ao preço de abertura de uma compra. Isto já é um StopLoss.
Para duas posições, você definiu seu ponto de equilíbrio, mas para três-quatro-cinco?
Primeiro você deve definir a fórmula de breakeven para posições unidirecionais, e depois você pode criar uma lógica.
 
nemo811:

Olá.

Você pode me dizer se eu escrevi as condições corretamente? (Os parâmetros Fractal_point_up_buy e Fractal_point_down_buy são normalizados).

Agradecemos antecipadamente.

Olá.

Se todas as variáveis forem declaradas, não vejo erros na sintaxe da MQL4.

Qual é o problema?

 
,
artmedia70:
Para uma posição aberta em 1500, um take em 1570 estaria bem (se você não levar em conta o StopLevel), mas para uma posição aberta em 1600, um take em 1570 causaria um erro de 130 - paradas erradas. Afinal de contas, um Take não pode ser inferior ao preço de abertura de uma compra. Isto já é um StopLoss.
Para duas posições, você definiu seu ponto de equilíbrio, mas para três-quatro-cinco?
Primeiro você deve definir a fórmula de Breakeven para posições unidirecionais, e depois você pode trabalhar a lógica.

Tudo depende de quando estabelecemos ou mudamos Take Profit. Ela se baseia no preço atual.
Razão: