Ваши вопросы по языку MQL4

MrGreen86

Гуру форума
Привет!
Помогите пожалуйста)
Есть ли такая функция которая множит не лот, а количество ордеров в сеточном советники?
Или как ее прописать?

int order_type = FindLastOrderType();
if ( order_type== OP_BUY)
{
price=FindLastOrderPrice( OP_BUY);
if( Ask<=price - Step*Point )
{
lastlot= FindLastLots( OP_BUY);
lastlot = NormalizeDouble ( lastlot*Multiplier,2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask,5,0, 0, "", Magic,0, Blue);
if ( ticket < 1)
Print ( "Ошибка открытия ордера на покупку");
ModifyOrders( OP_BUY);
что значит множит ордера а не лот?
 

Artem1584

Прохожий
Не лот увеличивается в два раза с каждым шагом, а количество ордеров одинакового лота.
 

Artem1584

Прохожий
С каждым шагом увеличивается не объема лота, а количество одинаковых лотов.
 

yurecwa

Активный участник
Здравствуйте. Помогите разобраться что не так с тралом. Вставляю в советник но нечего не происходит.

PHP:
  bool Traling()
  {
  if(TrailingStop>0) { 
   for(int i=OrdersTotal()-1; i>=0; i--) { 
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; 
      if(OrderSymbol()!=Symbol()) continue; 
      if(OrderMagicNumber()!=Magic) continue; 
      if(OrderType()==OP_BUY && Bid-OrderOpenPrice() >= TrailingStart*Point) { 
         if(OrderStopLoss() <= Bid-(TrailingStop+TrailingStep)*Point) { 
            if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*Point,Digits),OrderTakeProfit(),0,Green)) {
               Print("OrderModify error ",GetLastError()); 
            } 
         } 
      } 
      if(OrderType()==OP_SELL && OrderOpenPrice()-Ask >= TrailingStart*Point) { 
         if(OrderStopLoss() >= Ask+(TrailingStop+TrailingStep)*Point || OrderStopLoss()==0) { 
            if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*Point,Digits),OrderTakeProfit(),0,Green)) {
               Print("OrderModify error ",GetLastError());
            } 
         } 
      } 
   } 
}  
   return(true);
  }
 

Ugar

Гуру форума
Здравствуйте. Помогите разобраться что не так с тралом. Вставляю в советник но нечего не происходит.
Просмотрел код. Есть замечания, но они касаются качества работы, но не работоспособности вообще. Функцию не только надо добавить в код, но и вызвать в нужном месте.
 

yurecwa

Активный участник
Просмотрел код. Есть замечания, но они касаются качества работы, но не работоспособности вообще. Функцию не только надо добавить в код, но и вызвать в нужном месте.
Спасибо за ответ. Уже разобрался.
 
  • Like
Реакции: Ugar

Rost

Новичок форума
Здравствуйте, уважаемые эксперты!
Помогите модифицировать кусочек кода, в котором я хочу при расчете уровня безубытка цепочки позиций разной лотности учесть комиссию и swap. (здесь только для buy позиций, для селлов сделаю симметрично):

// сбор информации об открытых позициях
for (i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{

if(OrderType()==0)
{
pb=OrderSwap()+OrderCommission();
SummBuy=SummBuy+OrderOpenPrice()*OrderLots();
SummLotBuy=SummLotBuy+OrderLots();
}
}
}
}
BUBuy = SummBuy/SummLotBuy;
// вопрос, как корректно использовать параметр pb ?
 

Ugar

Гуру форума
Здравствуйте, уважаемые эксперты!
Помогите модифицировать кусочек кода, в котором я хочу при расчете уровня безубытка цепочки позиций разной лотности учесть комиссию и swap. (здесь только для buy позиций, для селлов сделаю симметрично):

// сбор информации об открытых позициях
for (i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{

if(OrderType()==0)
{
pb=OrderSwap()+OrderCommission();
SummBuy=SummBuy+OrderOpenPrice()*OrderLots();
SummLotBuy=SummLotBuy+OrderLots();
}
}
}
}
BUBuy = SummBuy/SummLotBuy;
// вопрос, как корректно использовать параметр pb ?
Уровни безубытка в валюте котировки, цены открытия ордеров то же. Здесь все вычисление выполняется в валюте котировки. А своп и комиссия в валюте депозита. Совсем другое вычисление получится.
Надо посчитать сумму прибылей в валюте депозита с учётом комиссий и свопов.
if(OrderType()==OP_BUY)ProfitBuy+=OrderProfit()+OrderSwap()+OrderCommission();
Узнать сколько стоит пункт в валюте депозита на 1 лот.
TickValue=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE);

Вычислить безубыток с пересчётом валюты депозита в валюту котировки.
if(OrderType()==OP_BUY)zero_level_Buy=Bid-(ProfitBuy/(TickValue*SummLotBuy)*_Point);
Как то так.
 

dimzaj

Новичок форума
подскажите, тут в настройках есть пуш оповещение?:-:)oi:
 

Вложения

  • xxx.png
    xxx.png
    20,8 КБ · Просмотры: 23

dimzaj

Новичок форума
Всех с наступающим. Есть индикатор, который на текущей свече сигналит, но оповещение приходит на емейл только после закрытия бара. Можно ли вообще сделать, что бы оповещение приходило на текущем баре?:
 

Ugar

Гуру форума
Всех с наступающим. Есть индикатор, который на текущей свече сигналит, но оповещение приходит на емейл только после закрытия бара. Можно ли вообще сделать, что бы оповещение приходило на текущем баре?:
Наверняка можно, но... Наверняка автор не просто так сделал отправку письма после закрытия бара. Возможно сигнал на текущем баре перерисовывается. Тогда слишком частая отправка писем может быть расценена почтовым сервером как маил-бомба. Как следствие блокировка отправки почты. Это просто как пример, могут быть и другие причины.
 

vladradon

Программист
Наверняка можно, но... Наверняка автор не просто так сделал отправку письма после закрытия бара. Возможно сигнал на текущем баре перерисовывается. Тогда слишком частая отправка писем может быть расценена почтовым сервером как маил-бомба. Как следствие блокировка отправки почты. Это просто как пример, могут быть и другие причины.
Привет! С Новым!!!!
Можно ведь поставить триггер, который давал бы сигнал раз в бар или в какой-то промежуток времени или вообще срабатывал бы один раз, но при обязательном до этого нахождения цены ("взведение курка") в определенном диапазоне - вариантов куча - только придумывай что будет правильнее отрабатывать. Или все сразу заложить...)))))))
 
  • Like
Реакции: Ugar

Ugar

Гуру форума
Привет! С Новым!!!!
Можно ведь поставить триггер, который давал бы сигнал раз в бар или в какой-то промежуток времени или вообще срабатывал бы один раз, но при обязательном до этого нахождения цены ("взведение курка") в определенном диапазоне - вариантов куча - только придумывай что будет правильнее отрабатывать. Или все сразу заложить...)))))))
Можно много всего придумывать. Но автор видать придумал отправку на новом баре. Возможно, для него сигнал был актуален только в этот момент. Иначе придумал бы что то другое.
 

vladradon

Программист
Можно много всего придумывать. Но автор видать придумал отправку на новом баре. Возможно, для него сигнал был актуален только в этот момент. Иначе придумал бы что то другое.
Тут тоже нюанс - отработка на новом баре означает закрытие предыдущего - т.е. закрытие предыдущего по факту будет давать "добро" на сигнал - я какой-то разницы не вижу. Другое дело если сигнал не будет зависеть от баров - был сигнал внутри свечи один раз - нормально - в каждой свечке не более одного раза, но это уже мысли вслух - можно индюка запускать на М5, а сигнализатора на Н1 - вариантов куча!;)
 

Ugar

Гуру форума
Тут тоже нюанс - отработка на новом баре означает закрытие предыдущего - т.е. закрытие предыдущего по факту будет давать "добро" на сигнал - я какой-то разницы не вижу. Другое дело если сигнал не будет зависеть от баров - был сигнал внутри свечи один раз - нормально - в каждой свечке не более одного раза, но это уже мысли вслух - можно индюка запускать на М5, а сигнализатора на Н1 - вариантов куча!;)
Ну допустим индикатор рисует стрелку. На текущем баре она может исчезать и появляться. Допустим при первом появлении стрелки на баре отправили письмо. А потом индюк убрал стрелку. А может автору надо было строгое соответствие стрелок и писем. Что бы по пропавшим стрелкам не отправлялись письма. Тогда письмо надо отправлять когда стрелка точно не пропадёт.

Смысла нет обсуждать, если индикатора не видели и не знаем что хотел автор.
 
Верх