Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 99
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Дратути. Как делать подобную панель?
Дратути. Как делать подобную панель?
Дратути. Как делать подобную панель?
Vitaly Muzichenko, Artyom Trishkin спасиб.
Продолжаю писать очередной свиной рыгаль на мартингейле, сливающий даже в тестере, иначе как же нам лося вырастить.
В текущий момент есть желаемый параметр который должен отвечать за возможность открытия следующего ордера после того как закроется предыдущий(е)
нужно сделать 2 сценария
1) если значение истинно
открываем ордер
обрабатываем
закрываем
и по новой
2) если ложно
Открываем ордер
Обрабатываем
Закрываем
и весело выполняем ExpertRemove
вся проблема в том что эти два условия взаимоисключающие, но нужно совместить в 1 эксперте так как
1) на старте задается значение
2) в условиях входа и обработки оно принимается к обработке как (если истина то открываем)
3) после закрытия ставим ложное
Если кому такое интересно буду рад выслушать варианты.Всё просто же:
С логикой беда.
Всё просто же:
Вроде что-то не то, если истинно - нужно капусту рубить, а не в кусты)
Подскажите пожалуйста. Эксперт не открывает ордера в терминале. Компиляция проходит, по графикам ордера должны открываться. По факту их нет. Код прилагаю.
double Lots=NormalizeDouble((AccountFreeMargin()/100*Percent)/MarketInfo(Symbol(),MODE_MARGINREQUIRED),1);//Определение количества лотов
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,0);//Параметры MACD основной линии текущего бара
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,1);//Параметры MACD основной линии предыдущего бара
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_MEDIAN,MODE_MAIN,2);//Параметры MACD основной линии со смещением на 2 бара
double StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double PSARCurrent=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,0);//Параметры ParabolicSAR текущего бара
double PSARPrevious=iSAR(NULL,Period(),Step_PSAR,Maximum_PSAR,1);//Параметры ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
static datetime New_Time=TimeCurrent();// Время текущего бара
bool New_Bar=false; // Флаг нового бара
int ticket,total,cnt;
//---------------------------------------------------------------------------
{
New_Bar=false; // Нового бара нет
if(Time[0]==New_Time) // Сравниваем время
{
New_Bar=true; // Поймался новый бар
if(New_Bar==false) // Если бар не новый..
return; // ..то уходим
}
}
total=OrdersTotal();// Опредление количства ордеров
if(total<1)
{
//--- нет открытых ордеров
if((AccountFreeMargin()/100*Percent)<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT)))
//Проверка на наличие денежных средств для открытия минимального лота
{
Print("Недостаточно средств. Свободные средства = ",AccountFreeMargin());
return;
}
//--- условие для открытия длинной позиции (BUY)
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,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((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,0,NULL,MAGICNUMBER,0,Red);
if(ticket>0)//проверка открытия позиции
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL ордер открыт : ",OrderOpenPrice());
else
Print("Ошибка открытия SELL ордера : ",GetLastError());
return;
}
}
//--- выход из блока "нет открытых ордеров"
}
//--- важно правильно войти в рынок, но более важно правильно из него выйти
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICNUMBER && // проверка магического номера ордера
OrderSymbol()==Symbol()) // проверка символа ордера
{
//--- длинная позиция открыта
if(OrderType()==OP_BUY)
{
//--- должен быть закрыт?
if((MacdCurrent<0 && MacdPrevious1>=0 && MacdPrevious2>0)
&&
PSARCurrent>iOpen(NULL,0,1))
{
//--- закрытие ордера и выход
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("Ошибка закрытия ордера ",GetLastError());
return;
}
//------------------Модификация ордера по СтопЛоссу
if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
else
Print("Цена Stop Loss ордера успешно модифицирована.");
return;
}
}
else // идём на короткую позицию
if(OrderType()==OP_SELL)
{
//--- должен быть закрыт?
if((MacdCurrent>0 && MacdPrevious1<=0 && MacdPrevious2<0)
&&
PSARCurrent<iOpen(NULL,0,1))
{
//--- закрытие ордера и выход
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("Ошибка закрытия ордера ",GetLastError());
return;
}
//-----------------Модификация ордера по СтопЛоссу
if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Previous_StopLoss,0,0,Blue))
Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
else
Print("Цена Stop Loss ордера успешно модифицирована.");
return;
}
}
}
//-------------------------------------------------------------------------------------------------------
да, впринципе все проще
а что если оставить этот вариант как запасной и сделать вот так
проверяем условие и...т.е как тогда заблокировать вход для дальнейшей работы