Destacado...se <0, então o lote do comércio perdido é aumentado
se >0, então o comércio lucrativo aumenta
Hi.
Tenho outra pergunta sobre sua EA
ao testá-lo em uma conta de demonstração, aconteceu o seguinte:
Quando o EA atinge os parâmetros especificados, ele passou para o modo "stop", ou seja, o botão "start" está aceso, mas a negociação não parou e as trocas são muito curtas, literalmente um ou dois centavos. É assim que deve ser?
Descobri também que a EA fechou alguns negócios não a preço de take ou stop e não no limite do dinheiro, mas "por nada" e o preço passou vários pontos antes de ser fechado. Ao mesmo tempo, o Expert Advisor cobre completamente as perdas anteriores, em alguns centavos (por exemplo, três negócios seguidos têm (-15,59 $) um negócio lucrativo = +15,62 $ e o fechou imediatamente!)
olhou para os registros, sem erros em nenhum lugar.
Tenho outra pergunta sobre seu Conselheiro Especialista
ao testá-lo em uma demonstração, aconteceu o seguinte:
Quando o EA atinge os parâmetros predefinidos, ele muda para o modo "stop", ou seja, o botão "start" está ligado, mas a negociação não é interrompida, mas são abertas negociações muito curtas, apenas um ou dois centavos de dólar. É assim que deve ser?
Descobri também que a EA fechou alguns negócios não no take ou stop e não no limite do dinheiro, mas "por nada" e o preço passou vários pontos antes de ser fechado. Ao mesmo tempo, o Expert Advisor cobre completamente as perdas anteriores, em alguns centavos (por exemplo, três negócios seguidos têm (-15,59 $) um negócio lucrativo = +15,62 $ e o fechou imediatamente!)
olhou para os registros, sem erros em nenhum lugar.
Por favor, envie-nos o código com suas correções. Veremos.
Por favor, informe qual função e onde acrescentar a esta simples EA,
Além das formas existentes de reiniciar muito com a inicial,
Se você quiser fechar a posição atual quando um saque da posição atual for alcançado, especificado na moeda do depósito, e então, quando você abrir o próximo, para zerar o lote para o inicial?
//+-----------------------------------------------------------------------------------------------+//| Simple Moving Average.mq4 |//| Copyright 2016, Andrey Minaev |//| https://www.mql5.com/ru/users/id.scorpion |//+-----------------------------------------------------------------------------------------------+#property copyright"Copyright 2016, Andrey Minaev"#property link"https://www.mql5.com/ru/users/id.scorpion"#property version"1.00"#property strict// Параметры советникаexternstring sParametersEA = ""; // Параметры советникаexterndouble dLots = 0.01; // Количество лотовexternint iStopLoss = 30; // Уровень убытка (в пунктах)externint iTakeProfit = 30; // Уровень прибыли (в пунктах)externint iSlippage = 3; // Проскальзование (в пунктах)externint iMagic = 1; // Индентификатор советникаexterndouble K_Martin = 2.0;
externint OrdersClose = 5;
externint DigitsLot = 2;
// Параметры индикатораexternstring sParametersMA = ""; // Параметры индикатораexternint iPeriodMA = 14; // Период усреднения// Глобальные переменныеdouble dMA;
//+-----------------------------------------------------------------------------------------------+intOnInit()
{
// Если брокер использует 3 или 5 знаков после запятой, то умножаем на 10if(Digits == 3 || Digits == 5)
{
iStopLoss *= 10;
iTakeProfit *= 10;
iSlippage *= 10;
}
return(INIT_SUCCEEDED);
}
//+-----------------------------------------------------------------------------------------------+voidOnDeinit(constint reason)
{
}
//+-----------------------------------------------------------------------------------------------+voidOnTick()
{
// Получим значение индикатора
dMA = iMA(Symbol(), 0, iPeriodMA, 0, MODE_SMA, PRICE_CLOSE, 0);
// Если нет открытых ордеров, то входим в условиеif(bCheckOrders() == true)
{
// Если появился сигнал на покупку, то откроем ордер на покупкуif(bSignalBuy() == true)
vOrderOpenBuy();
// Если появился сигнал на продажу, то откроем ордер на продажуif(bSignalSell() == true)
vOrderOpenSell();
}
}
//+-----------------------------------------------------------------------------------------------+//| Функция проверки открытых оредров |//+-----------------------------------------------------------------------------------------------+bool bCheckOrders()
{
// Переберем в цикле ордера, для проверки открытых ордеров данным советникомfor(int i = 0; i <= OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
return(false);
return(true);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на покупку |//+-----------------------------------------------------------------------------------------------+bool bSignalBuy()
{
if(dMA > Open[1] && dMA < Close[1])
return(true);
return(false);
}
//+-----------------------------------------------------------------------------------------------+//| Функция поиска сигнала на продажу |//+-----------------------------------------------------------------------------------------------+bool bSignalSell()
{
if(dMA < Open[1] && dMA > Close[1])
return(true);
return(false);
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на покупку |//+-----------------------------------------------------------------------------------------------+void vOrderOpenBuy()
{
int iOTi = 0; // Тикет ордера
iOTi = OrderSend(Symbol(), OP_BUY, LOT(), Ask, iSlippage, 0, 0, "", iMagic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
//+-----------------------------------------------------------------------------------------------+//| Функция открытия ордера на продажу |//+-----------------------------------------------------------------------------------------------+void vOrderOpenSell()
{
int iOTi = 0; // Тикет ордера
iOTi = OrderSend(Symbol(), OP_SELL, LOT(), Bid, iSlippage, 0, 0, "", iMagic, 0, clrNONE);
// Проверим открылся ли ордерif(iOTi > 0)
// Есди да, то выставим уровни убытка и прибыли
vOrderModify(iOTi);
else// Если нет, то получим ошибку
vError(GetLastError());
}
//+-----------------------------------------------------------------------------------------------+//| Функция модификации ордера |//+-----------------------------------------------------------------------------------------------+void vOrderModify(int iOTi)
{
int iOTy = -1; // Тип ордераdouble dOOP = 0; // Цена открытия ордераdouble dOSL = 0; // Стоп Лоссint iMag = 0; // Идентификатор советникаdouble dSL = 0; // Уровень убыткаdouble dTP = 0; // Уровень прибыли// Выберем по тикету открытый ордер, получим некоторые значенияif(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES))
{
iOTy = OrderType();
dOOP = OrderOpenPrice();
dOSL = OrderStopLoss();
iMag = OrderMagicNumber();
}
// Если ордер открыл данный советник, то входим в условиеif(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag)
{
// Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордерif(dOSL == 0)
{
if(iOTy == OP_BUY)
{
dSL = NormalizeDouble(dOOP - iStopLoss * Point, Digits);
dTP = NormalizeDouble(dOOP + iTakeProfit * Point, Digits);
bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
}
if(iOTy == OP_SELL)
{
dSL = NormalizeDouble(dOOP + iStopLoss * Point, Digits);
dTP = NormalizeDouble(dOOP - iTakeProfit * Point, Digits);
bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
}
}
}
}
//+-----------------------------------------------------------------------------------------------+//| Функция обработки ошибок |//+-----------------------------------------------------------------------------------------------+void vError(int iErr)
{
switch(iErr)
{
case129: // Неправильная ценаcase135: // Цена измениласьcase136: // Нет ценcase138: // Новые ценыSleep(1000);
RefreshRates();
break;
case137: // Брокер занятcase146: // Подсистема торговли занятаSleep(3000);
RefreshRates();
break;
}
}
//+-----------------------------------------------------------------------------------------------+double LOT()
{
int n=0;
double OL=dLots;
for (int j = OrdersHistoryTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
{
if (OrderProfit()<0)
{
if (n==0) OL=NormalizeDouble(OrderLots()*K_Martin,DigitsLot);
n++;
if (n>=OrdersClose) {Comment("1");return(dLots);}
}
else
{
if (n==0) {Comment("2");return(dLots);}
else {Comment("3");return(OL);}
}
}
}
}
return(OL);
}
//------------------------------------------------------------------
Obrigado pela dica pessoal , eu fiz desta maneira, diz quando vai para parar a perda ou ter lucro
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_entry =0;
double deal_profit =0.0;
double deal_volume =0.0;
string deal_symbol ="";
long deal_magic =0;
long deal_reason =-1;
if(HistoryDealSelect(trans.deal))
{
deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_profit=HistoryDealGetDouble(trans.deal,DEAL_PROFIT);
deal_volume=HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
}
elsereturn;
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_OUT)
{
if(deal_reason==DEAL_REASON_SL)
SendNotification (" Закрыл позицию > StopLoss");
if(deal_reason==DEAL_REASON_TP)
SendNotification ("Закрыл позицию > TakeProfit");
}
}
}
e assim por diante, uma nova compra ou venda
void OPENORDER(string ord)
{
double priceL=m_symbol.Ask();
if(ord=="Sell")
SendNotification (" открыл позицию > short");//--- check for free moneyif(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_BUY,my_lot,priceL)<0.0)
printf("We have no money. Free Margin = %f",m_account.FreeMargin());
elseif(!m_trade.Sell(my_lot,Symbol(),m_symbol.Bid(),my_SL,my_TP,""))
Print("BUY_STOP -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of Retcode: ",m_trade.ResultRetcodeDescription(),
", ticket of order: ",m_trade.ResultOrder()); // Если sell, то не открываемсяdouble priceS=m_symbol.Bid();
if(ord=="Buy")
SendNotification (" открыл позицию > long");//--- check for free moneyif(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_SELL,my_lot,priceS)<0.0)
printf("We have no money. Free Margin = %f",m_account.FreeMargin());
elseif(!m_trade.Buy(my_lot,Symbol(),m_symbol.Ask(),my_SL,my_TP,""))
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription(),
", ticket of deal: ",m_trade.ResultDeal());
Preciso fazer um EA baseado em um indicador, para que o EA possa funcionar sem a presença de um indicador. É possível fazer com que os dados de um indicador inscrito nele apareçam no gráfico, para que essas linhas não se tornem objetos?
Preciso fazer um EA baseado em um indicador, para que o EA possa funcionar sem o indicador. É possível exibir os dados do indicador escritos nele no gráfico, para não fazer essas linhas como objetos?
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Destacado...se <0, então o lote do comércio perdido é aumentado
se >0, então o comércio lucrativo aumenta
Hi.
Tenho outra pergunta sobre sua EA
ao testá-lo em uma conta de demonstração, aconteceu o seguinte:
Quando o EA atinge os parâmetros especificados, ele passou para o modo "stop", ou seja, o botão "start" está aceso, mas a negociação não parou e as trocas são muito curtas, literalmente um ou dois centavos. É assim que deve ser?
Descobri também que a EA fechou alguns negócios não a preço de take ou stop e não no limite do dinheiro, mas "por nada" e o preço passou vários pontos antes de ser fechado. Ao mesmo tempo, o Expert Advisor cobre completamente as perdas anteriores, em alguns centavos (por exemplo, três negócios seguidos têm (-15,59 $) um negócio lucrativo = +15,62 $ e o fechou imediatamente!)
olhou para os registros, sem erros em nenhum lugar.
Olá.
Tenho outra pergunta sobre seu Conselheiro Especialista
ao testá-lo em uma demonstração, aconteceu o seguinte:
Quando o EA atinge os parâmetros predefinidos, ele muda para o modo "stop", ou seja, o botão "start" está ligado, mas a negociação não é interrompida, mas são abertas negociações muito curtas, apenas um ou dois centavos de dólar. É assim que deve ser?
Descobri também que a EA fechou alguns negócios não no take ou stop e não no limite do dinheiro, mas "por nada" e o preço passou vários pontos antes de ser fechado. Ao mesmo tempo, o Expert Advisor cobre completamente as perdas anteriores, em alguns centavos (por exemplo, três negócios seguidos têm (-15,59 $) um negócio lucrativo = +15,62 $ e o fechou imediatamente!)
olhou para os registros, sem erros em nenhum lugar.
Por favor, envie-nos o código com suas correções. Veremos.
Poste o código com suas correções. Vamos ver.
então ainda estou testando o não corrigido, seu nativo.
por isso ainda estou testando o não-corrigido, seu nativo.
Não vejo nenhum erro...
Escreva em que período, em que par e quais parâmetros estavam lá quando os erros ocorreram.
Não vejo nenhum erro...
escreva em que período, em que par e quais parâmetros estavam presentes quando os erros ocorreram.
estas configurações:
tempo_RSI=0 período_RSI=14 nível_compra=30 nível_venda=70 Lote=0.01 K_Martin=1.6 Stoploss=200 Takeprofit=1000 CountLoss=100.0 CountProfit=25.0 Magic=777 DigitsLot=2 slippage=3
relatório é anexado abaixo.
há linhas amarelas com fechamento "pouco claro", nem por parada, nem por dinheiro.
e azul - comércios que foram abertos e fechados quase imediatamente
Olá!
Por favor, informe qual função e onde acrescentar a esta simples EA,
Além das formas existentes de reiniciar muito com a inicial,
Se você quiser fechar a posição atual quando um saque da posição atual for alcançado, especificado na moeda do depósito, e então, quando você abrir o próximo, para zerar o lote para o inicial?
aqui estão os ajustes:
tempo_RSI=0 período_RSI=14 nível_compra=30 nível_venda=70 Lote=0.01 K_Martin=1.6 Stoploss=200 Takeprofit=1000 CountLoss=100.0 CountProfit=25.0 Magic=777 DigitsLot=2 slippage=3
relatório é anexado abaixo.
há linhas amarelas com fechamento "pouco claro", nem por parada, nem por dinheiro.
E as linhas azuis representam negócios que foram abertos e fechados quase imediatamente.
Em que período de tempo?
e assim por diante, uma nova compra ou venda
Saudações. Por favor, me aconselhe sobre o mt5.
Preciso fazer um EA baseado em um indicador, para que o EA possa funcionar sem a presença de um indicador.
É possível fazer com que os dados de um indicador inscrito nele apareçam no gráfico, para que essas linhas não se tornem objetos?
Saudações. Por favor, me aconselhe sobre o mt5.
Preciso fazer um EA baseado em um indicador, para que o EA possa funcionar sem o indicador.
É possível exibir os dados do indicador escritos nele no gráfico, para não fazer essas linhas como objetos?
GráficoIndicadorAdd()