![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Eu mesmo quero aprender a escrever código... Por isso, pensei em pedir alguns conselhos. Pensei que talvez alguém pudesse me dar uma amostra... Obrigado!
O cliente reclama que o Expert Advisor continua abrindo negócios mesmo que tenha sido removido do quadro. Este não pode ser o caso, certo?
Se apagado e escrito corretamente, não deve. Descarga com código de desinicialização - 1. Se o Consultor Especialista faz loops... Temos que lidar com isso...
Se você fechar a janela do EA, o EA será descarregado com o código de desinicialização - 4:
RAZÃO_CHARTCLOSE
4
O quadro está fechado
https://www.mql5.com/ru/docs/constants/namedconstants/uninit
Bem, isso mesmo, há citações metaquotadas, como eu me lembro, e os textos são de boa qualidade.
Ao menos uma captura de tela para entender quais linhas você quer fundir
Pelo menos uma captura de tela para entender quais filas você quer fundir.
Pelo menos uma captura de tela para entender que tipo de linhas você quer combinar. Obrigado por sua resposta! Quero unir duas linhas de ferramentas superiores em uma no MT4.
O que poderia significar a cor vermelha da variável dT?
O que poderia significar a cor vermelha da variável dT?
double Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Определение общего количества лотов
double Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,1); //Параметры MACD основной линии текущего бара
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,2);//Параметры MACD основной линии предыдущего бара
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,3);//Параметры MACD основной линии со смещением на 2 бара
double StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,0);//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// Время текущего бара
bool New_Bar=false; // Флаг нового бара
int ticket,total,cnt;
//---------------------------------------------------------------------------
total=OrdersTotal();// Опредление количства ордеров
if(total<1)
{
//--- нет открытых ордеров
if(Margin_Percent<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT)))
//Проверка на наличие денежных средств для открытия минимального лота
{
Print("Не хватает средств. Свободные средства = ",AccountFreeMargin());
return;
}
if(Time[0]==New_Time) // Сравниваем время
{
New_Bar=true; // Поймался новый бар
if(New_Bar==false) // Если бар не новый..
return; // ..то уходим
}
//Определение количества лотов
if(Lots>Lots_Volume)
Lots=Lots_Volume;
else if(Lots<Lots_Volume)
Lots=MathFloor(Lots);
return;
//--- условие для открытия длинной позиции (BUY)
if(CurrentPSAR<iOpen(NULL,0,1) &&
((MacdPrevious1>0 && MacdPrevious2<0) ||
(MacdCurrent>0 && MacdPrevious1<0) ||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//проверка отрытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера BUY : ",GetLastError());
return;
}
}
//--- условие для открытия короткой позиции (SELL)
if(CurrentPSAR>iOpen(NULL,0,1) &&
((MacdCurrent<0 && MacdPrevious1>0) ||
(MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//проверка открытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера SELL : ",GetLastError());
return;
}
}
return; //--- выход из блока "нет открытых ордеров"
}
//--- важно правильно войти в рынок, но более важно правильно из него выйти
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderMagicNumber()==MAGICNUMBER && // проверка магического номера ордера
OrderSymbol()==Symbol()) // проверка символа ордера
{
//--- длинная позиция открыта
if(OrderType()==OP_BUY)
{
//--- должен быть закрыт?
if(CurrentPSAR>iOpen(NULL,0,1) &&
((MacdCurrent<0 && MacdPrevious1>0) ||
(MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
(MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
//--- закрытие ордера и выход
if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
{
Print("Ордер закрыт");
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//проверка открытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера SELL : ",GetLastError());
return;
}
}
else Print("Ошибка закрытия ордера ",GetLastError());
}
//------------------Модификация ордера по СтопЛоссу
else if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
Print("Цена Stop Loss ордера успешно модифицирована.");
else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
return;
}
return;
}
// идём на короткую позицию
else if(OrderType()==OP_SELL)
{
//--- должен быть закрыт?
if(CurrentPSAR<iOpen(NULL,0,1) &&
((MacdPrevious1>0 && MacdPrevious2<0) ||
(MacdCurrent>0 && MacdPrevious1<0) ||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
(MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
{
//--- закрытие ордера и выход
if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
{
Print("Ордер закрыт");
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
if(ticket>0)//проверка отрытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY ордер открыт : ",OrderOpenPrice());
else Print("Ошибка открытия ордера BUY : ",GetLastError());
return;
}
}
else Print("Ошибка закрытия ордера ",GetLastError());
}
//-----------------Модификация ордера по СтопЛоссу
else if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
Print("Цена Stop Loss ордера успешно модифицирована.");
else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
return;
}
}
}
}
//------
}
//-------------------------------------------------------------------------------------------------------
Pessoal, uma dica. TestGenerator dá erro: 2017.02.08 18:24:43.751 TestGenerator: erro de dados incomparável (valor baixo 1.09860 em 2016.07.27 19:30 não é alcançado a partir do menor período de tempo, preço baixo 1.09880 desajustes)