Escreverei um assessor mql4 gratuito - página 13

 
oleg3791: o assessor estava desenhando quatro linhas em cinco cliques de mouse no gráfico

Linhas necessárias em amarelo

#property strict

int      Количество;
datetime старый, новый=0;
double   старая, новая=0;

void OnInit()
{
  Количество=0;
  ObjectsDeleteAll(0, "Линия");
}

void OnChartEvent(const int     id,  // идентификатор события   
                  const long &x, const double &yy,
                  const string& s)
{
  if(id!=CHARTEVENT_CLICK) return;
  if(Количество>4){OnInit();return;}
  string name[5]={"","Линия_1","Линия_2","Линия_3","Линия_4"};
  int y=int(yy);
  int O;
  старый=новый; старая=новая;
  ChartXYToTimePrice(0,int(x),y,O,новый,новая); // xy ---> время,цену
  if(Количество>0)
  ObjectCreate(name[Количество],OBJ_TREND,0,старый,старая,новый,новая);
  ObjectSet(name[Количество],OBJPROP_RAY,false);
  ObjectSet(name[Количество],OBJPROP_COLOR,Gold);
  ObjectSet(name[Количество],OBJPROP_WIDTH,2);
  Количество++; 
}

void OnDeinit(const int причина)
{
  OnInit();
}
 
STARIJ:

Linhas amarelas necessárias

Obrigado!!!
 
oleg3791:   Obrigado!!!

Agora me diga como ter lucro aqui... Ou é para construir um jogo?

 

Olá a todos, vocês podem me ajudar a encontrar um erro no código da EA, acho que pesquisei tudo, parece que está tudo escrito corretamente no código, mas o programa não negocia corretamente por alguma razão! A idéia é a seguinte: o assessor tem que procurar duas velas longas da mesma direção (o comprimento entre as velas é ajustável no assessor, ou seja, entre as duas velas mínimas ou máximas, dependendo da direção), se o preço na direção oposta quebrar o mínimo ou máximo da última vela, deve ser aberto um negócio (Exemplo de situações de imagem no quadro anexo ao arquivo). O conselheiro deve abrir negócios em todas essas situações adequadas, mas por alguma razão ele abre negócios somente nas janelas de negociação entre dias. Aqui está a situação, que não é difícil para os programadores, por favor, ajude, conserte o erro. Código EA veja abaixo, assim como no arquivo anexo.

//+-----------------------------------------------------------------------------------------------+
//|                                                                           Spacing_Candles.mq4 |
//|                                                                        Copyright 2017, Vladim |
//|                                                                            vk.com/id229534564 |
//|                                                                  Mail: Vladim120385@yandex.ru |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2017, Vladim"
#property link      "vk.com/id229534564"
#property version   "1.00"
#property strict

//--- параметры советника
extern string paramEA    = "";     // Parameters EA
extern double volume     = 0.01;   // Volume
extern double stopLoss   = 5;     // StopLoss
extern double takeProfit = 1.5;    // TakeProfit
extern double maxSpacing = 150;   // MaxSpacing
extern double minSpacing = 30;    // MinSpacing
extern double TrailingStop  = 0;   // TrailingStop
extern int    magic      = 127;    // Magic

//--- глобальные переменные
datetime newCandle;
int tip;

//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
   
   return(INIT_SUCCEEDED);
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   
}
//+-----------------------------------------------------------------------------------------------+
void OnTick()
{
   if(newCandle != Time[0]) FindPattern();
   newCandle = Time[0];
}
//+-----------------------------------------------------------------------------------------------+
void OpenOrder(int type)   // Откроем рыночный ордер
{
   if(type == OP_BUY)  if(OrderSend(_Symbol, OP_BUY,  volume, Ask, 0, 0, 0, "", magic, 0)) SetSLTP(OP_BUY);
   if(type == OP_SELL) if(OrderSend(_Symbol, OP_SELL, volume, Bid, 0, 0, 0, "", magic, 0)) SetSLTP(OP_SELL);
}
//+-----------------------------------------------------------------------------------------------+
void SetSLTP(int type)   // Установим стоп приказы
{
   double sl = 0;
   double tp = 0;
   
   if(type == OP_BUY)
      for(int i = 0; i < OrdersTotal(); i++)
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_BUY && OrderStopLoss() == 0)
            {
               sl = NormalizeDouble(Low[1] - stopLoss * _Point, _Digits);
               tp = NormalizeDouble(OrderOpenPrice() + (OrderOpenPrice() - Low[1]) * takeProfit, Digits);
               if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) return;
            }
   if(type == OP_SELL)
      for(int i = 0; i < OrdersTotal(); i++)
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_SELL && OrderStopLoss() == 0)
            {
               sl = NormalizeDouble(High[1] + stopLoss * _Point, _Digits);
               tp = NormalizeDouble(OrderOpenPrice() - (High[1] - OrderOpenPrice()) * takeProfit, Digits);
               if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) return;
            }
}
//+-----------------------------------------------------------------------------------------------+
void FindPattern()   // Ищем большое расстояние между свечами
{
   if(High[1] < High[2] && Bid > High[1] && Low[1] < Low[2])
   {
      double spacing = NormalizeDouble((High[2] - High[1]) / _Point, 0);
            
      if(maxSpacing >= spacing && minSpacing <= spacing)
         OpenOrder(OP_BUY);
   }
   if(Low[1] > Low[2] && Bid < Low[1] && High[1] > High[2])
   {
      double spacing = NormalizeDouble((Low[1] - Low[2]) / _Point, 0);
            
      if(maxSpacing >= spacing && minSpacing <= spacing)
         OpenOrder(OP_SELL);
   }   
   {
      if (TrailingStop!=0) TrailingStop();      
   }
}
//+-----------------------------------------------------------------------------------------------+
void TrailingStop()
{
   double StLo,OSL,OOP;
   bool error=true;   
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS))
      {
         tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
         {
            OSL   = NormalizeDouble(OrderStopLoss(),Digits);
            OOP   = NormalizeDouble(OrderOpenPrice(),Digits);
            if (tip==0)        
            {  
               StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
               if (StLo < OOP) continue;
               if (StLo > OSL)
                  error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);

            }                                         
            if (tip==1)    
            {                                         
               StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);           
               if (StLo > OOP) continue;
               if (StLo < OSL || OSL==0 )
                  error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);
            } 
            if (!error) Alert("Error TrailingStop ",GetLastError(),"   ",Symbol(),"   SL ",StLo);
         }
      }
   }
}
//+-----------------------------------------------------------------------------------------------+


Foto do gráfico "Como uma EA deve apostar".

Arquivos anexados:
 
Vladim1203:

Olá a todos, podem me ajudar a encontrar um erro no código da EA, acho que pesquisei tudo, parece ter sido escrito corretamente no código, mas o programa não é comercializado corretamente por alguma razão! A idéia é a seguinte: o assessor tem que procurar duas velas longas da mesma direção (o comprimento entre as velas é ajustável no assessor, ou seja, entre as duas velas mínimas ou máximas, dependendo da direção), se o preço na direção oposta quebrar o mínimo ou máximo da última vela, deve ser aberto um negócio (Exemplo de situações de imagem no quadro anexo ao arquivo). O conselheiro deve abrir negócios em todas essas situações adequadas, mas por alguma razão ele abre negócios somente nas janelas de negociação entre dias. Aqui está a situação, que não é difícil para os programadores, por favor, ajude, conserte o erro. Veja o código EA abaixo, bem como no arquivo anexo.

É melhor primeiro escrever a parte da EA que marcaria na carta as velas encontradas, para que tudo se torne claro. E as seguintes linhas são desnecessárias em seu caso:

extern string paramEA    = "";     // Parameters EA

и

//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
   
   return(INIT_SUCCEEDED);
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   
}
//+-----------------------------------------------------------------------------------------------+
 
STARIJ:

Agora me diga como ter lucro aqui... Ou você precisa dele para construir um jogo?


Ainda não há como obter lucro. Há um algoritmo para o cálculo de duas metas prováveis de preço, ao longo da tendência, em cinco pontos principais, mas é calculado em um servidor especial com uma assinatura paga. Eu mesmo quero calcular as metas, o trabalho no algoritmo ainda não terminou.

Como será seu programa na MQL4?

 
Anton Yakovlev:
Se você tem uma boa estratégia e está disposto a compartilhá-la, posso escrever uma EA. Convido-o a discuti-la publicamente ou em mensagens privadas.

Anton, ajude-me, acrescentei a função de parada móvel à EA, testei-a e ela mostra dois erros. - Tenho minha cabeça esmagada, não consigo descobrir como consertá-los. Entretanto, as negociações são fechadas de acordo com a antiga estratégia, depois que o preço tocou o limite superior do canal e o limite inferior, respectivamente. Acho que algo tem que ser mudado aqui também. - Chamada de volta aos caras do exército dnr.

#direitos autorais "Copyright 2017, MetaQuotes Software Corp."

#link da propriedade "https://www.mql5.com"

#propriedade versão "1.00"

#propriedade rigorosa


//---------------------------------------------------------

Lotes duplos externos = 0,01;

Exterior int TakeProfit = 600;

StopLoss int externo = 25;

magia int externa = 0001;

Escorregão externo int = 3;

externo int TralType = 0; // 0-SAR, 1-ATR, 2-HMA.

duplo SAR_Step externo = 0,02;

duplo SAR_Max externo = 0,2;

período ATR_Periodo externo int = 14;

duplo externo ATR_K = 2,0;

período HMA_Periodo externo interno = 16;

método externo interno HMA_Método = 3;

HMA_Shift externo interno = 0;

data/hora LBT;

//---------------------------------------------------------

TMA fio externo = "parâmetros indicadores TMA";

String externo TimeFrame = "time frame atual";

Externo int Médio Comprimento = 56;

preço interno externo = "PREÇO_CLOSE";

duplo ATRMultiplicador externo = 2,0;

período ATRP externo interno = 100;

bool externo Interpolar = verdadeiro;

//---------------------------------------------------------

duplo PriceHigh, PriceLow, SL, TP;

int ticket;


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

//| Função de iniciação de especialista |

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

int OnInit()

{

se (Dígitos == 3 || Dígitos == 5)

{

TakeProfit *= 10;

StopLoss *= 10;

Slippage *= 10;

}

return(INIT_SUCCEED);

}

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

//| Função de desinicialização especializada |

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

nulo OnDeinit(const int razão)

{


}

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

//| função tick expert |

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

nulo OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

bilhete = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

se (bilhete > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Dígitos);

TP = NormalizeDouble(Bid - TakeProfit*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

se (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro de modificação do pedido!)

}

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

bilhete = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

se (bilhete > 0)

{

TP = NormalizeDuplo(Ask + TakeProfit*Point, Dígitos);

SL = NormalizeDouble(Ask - StopLoss*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar o pedido de compra!)

} else Print("Erro ao abrir o pedido de compra");

}

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

//| Função de iniciação de especialista |

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

int init()

{

//--------


//--------

retorno (0);

}

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

//| função tick expert |

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

nulo OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

bilhete = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

se (bilhete > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Dígitos);

TP = NormalizeDouble(Bid - TakeProfit*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

se (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar a ordem de venda!)

} else Print("Erro ao abrir a ordem de venda!)

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

bilhete = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

se (bilhete > 0)

{

TP = NormalizeDuplo(Ask + TakeProfit*Point, Dígitos);

SL = NormalizeDouble(Ask - StopLoss*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar o pedido de compra!)

} else Print("Erro ao abrir o pedido de compra");

}

se (Pergunte <= PriceLow && CountSell() > 0)

{

para (int i = OrderTotal() -1; i>0; i--)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

se (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Imprimir("Vender ordem fechar erro!)

}

}

}

if (Licitação >= PriceHigh && CountBuy() > 0)

{

para (int i = OrderTotal() -1; i>0; i--)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Imprimir("OrderClose Buy error!)

}

}

}

}

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

int CountSell()

{

int count = 0;

para (int trade = OrdensTotal()-1; trade>=0; tradee--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELLL)

contar++;

}

}

devolução(contagem);

}//+------------------------------------------------------------------+

int CountBuy()

{

int count = 0;

para (int trade = OrdensTotal()-1; trade>=0; tradee--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

contar++;

}

}

devolução(contagem);

}

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

//| Função de desinicialização especializada |

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

int deinit()

{

//+-------


//+-------

retorno (0)

}

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

//| função de início especializado |

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

int Start()

{

//-----

erro de bool = falso;

se (LBT!=Time[0]) {

se (OrderTotal()!=0) {

para (int i=0; i<OrdersTotal(); i++) {

se (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

duplo SL = OrderStopLoss();

se OrderType()==0) {

interruptor (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

pausa;

caso 1: SL = Alto[1] - iATR(NULL,0,ATR,Período,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0)

pausa;

}

se (SL<OrderStopLoss())

SL = OrderStopLoss();

}

se (OrderType()==1) {

interruptor (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

pausa;

caso 1: SL = Baixa[1] + iATR(NULL,0,ATR,Período,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0)

pausa;

}

se (SL>OrderStopLoss())

SL = OrderStopLoss();

}

se (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

erro = verdadeiro;

}

}

}

}

se (!erro)

LBT = Tempo[0];

}

retorno (0);

}

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

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Andrey Luxe:

Para ganhar experiência nesta área, vou escrever 25 EAs gratuitamente para suas idéias e estratégias interessantes

Restam apenas 19 EAs


Adicionei a função trailing stop à EA e a comentei e ela tem dois erros. - Posso ter alguns erros, mas não sei como corrigi-los. Entretanto, as negociações são fechadas de acordo com a antiga estratégia, depois que o preço tocou o limite superior do canal e o limite inferior, respectivamente. Acho que algo tem que ser mudado aqui também. - Chamada de volta aos caras do exército dnr.

#direitos autorais "Copyright 2017, MetaQuotes Software Corp."

#link da propriedade "https://www.mql5.com"

#propriedade versão "1.00"

#propriedade rigorosa


//---------------------------------------------------------

Lotes duplos externos = 0,01;

Exterior int TakeProfit = 600;

StopLoss int externo = 25;

magia int externa = 0001;

Escorregão externo int = 3;

externo int TralType = 0; // 0-SAR, 1-ATR, 2-HMA.

duplo SAR_Step externo = 0,02;

duplo SAR_Max externo = 0,2;

período ATR_Periodo externo int = 14;

duplo externo ATR_K = 2,0;

período HMA_Periodo externo interno = 16;

método externo interno HMA_Método = 3;

HMA_Shift externo interno = 0;

data/hora LBT;

//---------------------------------------------------------

TMA fio externo = "parâmetros indicadores TMA";

String externo TimeFrame = "time frame atual";

Externo int Médio Comprimento = 56;

preço interno externo = "PREÇO_CLOSE";

duplo ATRMultiplicador externo = 2,0;

período ATRP externo interno = 100;

bool externo Interpolar = verdadeiro;

//---------------------------------------------------------

duplo PriceHigh, PriceLow, SL, TP;

int ticket;


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

//| Função de iniciação de especialistas |

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

int OnInit()

{

se (Dígitos == 3 || Dígitos == 5)

{

TakeProfit *= 10;

StopLoss *= 10;

Slippage *= 10;

}

return(INIT_SUCCEED);

}

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

//| Função de desinicialização especializada |

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

nulo OnDeinit(const int razão)

{


}

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

//| função tick expert |

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

nulo OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

bilhete = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

se (bilhete > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Dígitos);

TP = NormalizeDouble(Bid - TakeProfit*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

se (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro de modificação do pedido!)

}

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

bilhete = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

se (bilhete > 0)

{

TP = NormalizeDuplo(Ask + TakeProfit*Point, Dígitos);

SL = NormalizeDouble(Ask - StopLoss*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar o pedido de compra!)

} else Print("Erro ao abrir o pedido de compra");

}

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

//| Função de iniciação de especialistas |

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

int init()

{

//--------


//--------

retorno (0);

}

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

//| função tick expert |

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

nulo OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && Bid >= PriceHigh)

{

bilhete = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "TMA robot", Magic, 0, Red);

se (bilhete > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Dígitos);

TP = NormalizeDouble(Bid - TakeProfit*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

se (!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar a ordem de venda!)

} else Print("Erro ao abrir a ordem de venda!)

}

if (CountBuy() == 0 && Ask <= PriceLow)

{

bilhete = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "TMA robot", Magic, 0, Blue);

se (bilhete > 0)

{

TP = NormalizeDuplo(Ask + TakeProfit*Point, Dígitos);

SL = NormalizeDouble(Ask - StopLoss*Point, Dígitos);

se (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Imprimir("Erro ao modificar o pedido de compra!)

} else Print("Erro ao abrir o pedido de compra");

}

se (Pergunte <= PriceLow && CountSell() > 0)

{

para (int i = OrderTotal() -1; i>0; i--)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

se (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Imprimir("Vender ordem fechar erro!)

}

}

}

if (Licitação >= PriceHigh && CountBuy() > 0)

{

para (int i = OrderTotal() -1; i>0; i--)

{

se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Imprimir("OrderClose Buy error!)

}

}

}

}

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

int CountSell()

{

int count = 0;

para (int trade = OrdensTotal()-1; trade>=0; tradee--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELLL)

contar++;

}

}

devolução(contagem);

}//+------------------------------------------------------------------+

int CountBuy()

{

int count = 0;

para (int trade = OrdensTotal()-1; trade>=0; tradee--)

{

if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

contar++;

}

}

devolução(contagem);

}

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

//| Função de desinicialização especializada |

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

int deinit()

{

//+-------


//+-------

retorno (0)

}

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

//| função de início especializado |

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

int Start()

{

//-----

erro de bool = falso;

se (LBT!=Time[0]) {

se (OrderTotal()!=0) {

para (int i=0; i<OrdersTotal(); i++) {

se (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

duplo SL = OrderStopLoss();

se OrderType()==0) {

interruptor (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

pausa;

caso 1: SL = Alto[1] - iATR(NULL,0,ATR,Período,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0)

pausa;

}

se (SL<OrderStopLoss())

SL = OrderStopLoss();

}

se (OrderType()==1) {

interruptor (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

pausa;

caso 1: SL = Baixa[1] + iATR(NULL,0,ATR,Período,1)*ATR_K;

pausa;

caso 2: SL = iCustom(NULL,0, "VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift, fals,fals,",1,0,0)

pausa;

}

se (SL>OrderStopLoss())

SL = OrderStopLoss();

}

se (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

erro = verdadeiro;

}

}

}

}

se (!erro)

LBT = Tempo[0];

}

retorno (0);

}

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

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
vkravtzov:

Acrescentei a função de trailing stop ao Expert Advisor, e a compilei e obtive dois erros. - Perdi a cabeça, não consigo descobrir como consertá-los para conseguir uma coruja. Entretanto, as negociações são fechadas de acordo com a antiga estratégia, depois que o preço tocou o limite superior do canal e o limite inferior, respectivamente. Acho que algo tem que ser mudado aqui também. - Devolva-o aos caras do exército do DPR.


Não há necessidade de spam.
 
Victor Nikolaev:
Você não deve enviar spam.

Peço desculpas se fiz algo errado. Ainda não entendo como eu enviei spam... Acho que dirigi duas mensagens a dois camaradas. Ou isso não é permitido? - Erro meu.