Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Linhas necessárias em amarelo
Linhas amarelas necessárias
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.
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:
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?
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&",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&",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);
}
//+------------------------------------------------------------------+
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&",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&",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);
}
//+------------------------------------------------------------------+
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.
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.