Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 38
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Дак передавайте аргумент функции, раз он предусмотрен. Хотя лучше убрать его, тавтология получается.
И там в цикле не все ордера пересчитает.
тикет с перезаписью, работа от последнего ордера с мартином
и как тогда убрать declaration of 'count' hides global declaration at line...
интересно сделать чтоб он работал так как нужно.
Пока что по результатам тестера где - то выдает вполне неплохую работу, где - то сразу "непреодолимые ошибки в эксперте"
Приветствую.
Наткнулся на запись вот такого формата:
Т.Е..здесь условному оператору if вместо выражения сразу записали торговую функцию типа bool. Правильно ли я понимаю что такая запись равносильна :
if (OrderSelect(ticket, SELECT_BY_TICKET))==true {OrderModify(ticket, OrderOpenPrice(), SL, TP, 0}; ?
Смотрел и в справке и в учебнике - запись такого формата не обнаружил.
И можно ли так, вместо выражения, сразу записывать функции другого типа? И если можно то какой при этом будет алгоритм?
поправил,вставил аргумент, вынес в глобальную область, теперь выдает предупреждение что данный аргумент уже используется в качестве входа в других функциях
тикет с перезаписью, работа от последнего ордера с мартином
и как тогда убрать declaration of 'count' hides global declaration at line...
интересно сделать чтоб он работал так как нужно.
Пока что по результатам тестера где - то выдает вполне неплохую работу, где - то сразу "непреодолимые ошибки в эксперте"
Приветствую.
Наткнулся на запись вот такого формата:
Т.Е..здесь условному оператору if вместо выражения сразу записали торговую функцию типа bool. Правильно ли я понимаю что такая запись равносильна :
if (OrderSelect(ticket, SELECT_BY_TICKET))==true {OrderModify(ticket, OrderOpenPrice(), SL, TP, 0}; ?
Смотрел и в справке и в учебнике - запись такого формата не обнаружил.
И можно ли так, вместо выражения, сразу записывать функции другого типа? И если можно то какой при этом будет алгоритм?
Вот прям так if (OrderSelect(ticket, SELECT_BY_TICKET))==true {OrderModify(ticket, OrderOpenPrice(), SL, TP, 0}; работать не будет. Условие нельзя за скобки выбрасывать.
А вот так if (OrderSelect(ticket, SELECT_BY_TICKET)==true) {OrderModify(ticket, OrderOpenPrice(), SL, TP, 0}; можно.
Вот прям так if (OrderSelect(ticket, SELECT_BY_TICKET))==true {OrderModify(ticket, OrderOpenPrice(), SL, TP, 0}; работать не будет. Условие нельзя за скобки выбрасывать.
А вот так if (OrderSelect(ticket, SELECT_BY_TICKET)==true) {OrderModify(ticket, OrderOpenPrice(), SL, TP, 0}; можно.
Покажите исправленный вариант, а то без кода гадание получается.
Ок.
Вроде как добил что мог. Описание сделал. Цель - понять почему он не работает так как хочется.
//| ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss = 1000; //Стоплосс ордера
extern double TakeProfit = 1500; //Тейкпрофит ордера
extern double TrailingStop = 1000; // трал
extern int Delta = 100; //Расстояние от цены для установки ордера
extern double LOT = 0.1; //Объём позиции
extern int Magic =200;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (TrailingStop!=0) Trailing();
//ИНДИКАТОР RSI
double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
int b,s,p,res;
double BuyPrice=Ask+Delta*Point;
double SellPrice=Bid-Delta*Point;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP) b++;
if (OrderType()==OP_SELLSTOP) s++;
}
}
double SL,TP;
//---- buy stop
if(RSI0>50&&RSI1<50)
{
res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
}
//---- sell stop
if(RSI0<50&&RSI1>50)
{
res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red );
}
//---- buy stop делете
if(RSI0<50&&RSI1>50)
{
OrderDelete( OrderTicket());
}
//---- sell stop делете
if(RSI0>50&&RSI1<50)
{
OrderDelete( OrderTicket());
}
//----
return(0);
}
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------
void Trailing()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()||OrderMagicNumber()==Magic)
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop)
{
if(OrderStopLoss()<Bid-TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>TrailingStop)
{
if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
а как ты получил тикет неоткрытого ордера?
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
if (сигнал_bue) OrderDelete(OrderTicket());
else b++;
if (OrderType()==OP_SELLSTOP)
if (сигнал_sell) OrderDelete(OrderTicket());
else s++;
}
}
так?Простоя это туда не могу вставить
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
if (сигнал_bue) OrderDelete(OrderTicket());
else b++;
if (OrderType()==OP_SELLSTOP)
if (сигнал_sell) OrderDelete(OrderTicket());
else s++;
}
}