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

Milord

Местный знаток
ECN счет может не дать выставить сразу стандартные тейкпрофит и стоплосс - сначала получаем от команды OrderSend тикет>0 и только потом модификацией выставляем (если нужно) ТП и СЛ. Но, кстати, у меня мои ECN счета обычно на этот счет не капризничали... Но я и пользуюсь в основном только виртуальными закрывашками.
спасибо за ответ,начинаю вспоминать что где то читал про это...
 

star603

Новичок форума
Подскажите какой вариант исполнения лучше? Я думаю вариант №1. Заранее спасибо.

Вариант №1:
Код:
double stopi0()
{
 double _SL2 =0.0;
       for(int y=0; y<=OrdersTotal()-1; y++)
        {
         if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY)
              {
               if(Loss==0)
                {
                }
               if(Loss==1)
                {
                }
              }
           }
         }
 return(_SL2);
}
Вариант №2:
Код:
double stopi0()
{
 double _SL2 =0.0;
   if(Loss==0)
    {
            for(int y=0; y<=OrdersTotal()-1; y++)
        {
         if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY)
              {
              }
           }
         }
    }
    if(Loss==1)
    {
            for(int y=0; y<=OrdersTotal()-1; y++)
        {
         if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY)
              {
              }
           }
         }
    }
 return(_SL2);
}
 

AlexeyVik

Программист mql4 mql5
Подскажите какой вариант исполнения лучше? Я думаю вариант №1. Заранее спасибо.

Вариант №1:
Код:
double stopi0()
{
 double _SL2 =0.0;
       for(int y=0; y<=OrdersTotal()-1; y++)
        {
         if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY)
              {
               if(Loss==0)
                {
                }
               if(Loss==1)
                {
                }
              }
           }
         }
 return(_SL2);
}
Вариант №2:
Код:
double stopi0()
{
 double _SL2 =0.0;
   if(Loss==0)
    {
            for(int y=0; y<=OrdersTotal()-1; y++)
        {
         if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY)
              {
              }
           }
         }
    }
    if(Loss==1)
    {
            for(int y=0; y<=OrdersTotal()-1; y++)
        {
         if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY)
              {
              }
           }
         }
    }
 return(_SL2);
}
Лучше третий вариант.
 

AlexeyVik

Программист mql4 mql5
Подскажи как реализовать я попробую воплотить этот вариант.
Если мои мозги не совсем высохли, мне помнится я уже встречал эти Loss==0 и Loss== 1. И давал совет относительно лучшего варианта исполнения. Но там решение было не замечено. А теперь мне лениво.
Может я не справедлив, но лень родилась раньше меня. Извиняй…
 

star603

Новичок форума
Если мои мозги не совсем высохли, мне помнится я уже встречал эти Loss==0 и Loss== 1. И давал совет относительно лучшего варианта исполнения. Но там решение было не замечено. А теперь мне лениво.
Может я не справедлив, но лень родилась раньше меня. Извиняй…
дал бы чуть заметнее подсказки
 

Абдулхаким

Почетный гражданин
Подскажите какой вариант исполнения лучше?
в каких критериях он должен быть лучше ?
соблюдение заложенной логики, минимум времени исполнения и потребления ресурсов, компактность записи кода или ... ?
как мне кажется, на этапе изучения языка озадачивать себя чем-то не доступным для понимания, будет только тормозить процесс освоения.
или вопрос был не об этом ? :)
 

AlexeyVik

Программист mql4 mql5
в каких критериях он должен быть лучше ?
соблюдение заложенной логики, минимум времени исполнения и потребления ресурсов, компактность записи кода или ... ?
как мне кажется, на этапе изучения языка озадачивать себя чем-то не доступным для понимания, будет только тормозить процесс освоения.
или вопрос был не об этом ? :)
Ничего тормозить не будет если не в кубики играть, а пытаться понять логику построения кода.
Часто можно встретить два цикла для подсчёта количества ордеров Buy и Sell отдельно. Но ведь всё посчитать можно за один цикл.
Это самая тупая ошибка начинающих. И тянется она, у некоторых, так долго, что они уже начинают считать себя профи…
Вторая ошибка в том, что в новых версиях языка введены новые формы функций. Применяя которые уже сейчас, будет гораздо легче освоить MQL5, но многие считающие себя профи в MQL4 никак не могут их найти в документации. Типа работает и ладно…
Что-то часто в последнее время встречается похожее отношение к жизни…
Вкусно и точка. и ладно…
Поехали и ладно… хорошо хоть не «Завелась и ладно…»
 

Абдулхаким

Почетный гражданин
Это самая тупая ошибка начинающих.
в коде в большинстве случаев "всё по ситуации".
у него встал вопрос : выносить условие за цикл или оставить его внутри цикла (на сколько я понял :))
если оно не выполняется и по сути цикл не нужен, то и смысла нет его запускать и ещё и проверять условие при каждой итерации на каждом тике. но во втором варианте расписал "портянку".
вот и что лучше для него ?
минимум времени исполнения и потребления ресурсов, компактность записи кода

Ничего тормозить не будет
не спорю, у каждого по своему
а т.к. уровень знаний у него пока не велик
Спасибо об этом не подозревал
советую пока не заморачиваться этими вопросами
 

Buch99

Прохожий
Друзья, можно ли написать индикатор, который будет соберет данные с сайта инвестинг и будет ее показывать на графике уровнями? Как дкз нкз мейкер у Сергея Пекшева. Тот правда много информации собирает с СМЕ. Этот простой
 

AlexeyVik

Программист mql4 mql5
в коде в большинстве случаев "всё по ситуации".
у него встал вопрос : выносить условие за цикл или оставить его внутри цикла (на сколько я понял :))
если оно не выполняется и по сути цикл не нужен, то и смысла нет его запускать и ещё и проверять условие при каждой итерации на каждом тике. но во втором варианте расписал "портянку".
вот и что лучше для него ?



не спорю, у каждого по своему
а т.к. уровень знаний у него пока не велик

советую пока не заморачиваться этими вопросами
Я говорил не о нём, а вообще обо всех начинающих. И особенно о начинающих дающих советы другим начинающим. На тебя не намекаю…:)
 

star603

Новичок форума
Чего я точно пока не знаю:
1. )Не много дописал твою фразу
минимум времени исполнения и потребления ресурсов, компактность записи кода
и как это определять
2) кстати:
выносить условие за цикл или оставить его внутри цикла (на сколько я понял :))выносить условие за цикл или оставить его внутри цикла (на сколько я понял :)) - ты правильно понял

3)Не знаю как находить новые функции и как их применять
 

Ugar

Гуру форума
Чего я точно пока не знаю:
1. )Не много дописал твою фразу

2) кстати:
выносить условие за цикл или оставить его внутри цикла (на сколько я понял :))выносить условие за цикл или оставить его внутри цикла (на сколько я понял :)) - ты правильно понял

3)Не знаю как находить новые функции и как их применять
1. Задумываться о компактности кода и ресурсах, я бы ещё добавил о надёжности работы, стоит когда есть хотя бы микроскопический опыт программирования. Для начала досточно что бы программа заработала и при это относительно правильно.
2. Если нужно что бы проверялось условие или выполнялось действие с каждой интерацией, их надо поместить внутрь цикла, иначе вне цикла.
Например для действий в цикле нужна цена. Можно получит эту цену вне цикла и использовать внутри только если в цикле выполняется что то настолько быстрое что цена не успеет измениться.
А если в цикле что то медленное, открытие, модификация, закрытие ордеров, цена может успевать измениться. Стоит получать цену внутри цикла перед каждым использованием.
3. Проще по разделам. Например если нужно что то связанное с временем, открыть соответствующий раздел в справочнике и почитать что вообще там есть и выбрать наиболее подходящую функцию.
 

Milord

Местный знаток
Всем привет!
возник вопрос,как прописать в коде открытие ордеров на открытии свечи,того таймфрейма,в окне которого стоит советник(и чтобы его можно было в тестере погонять),набросал кусок кода ниже в общем виде и нужно ли перед OrderSend(...) вставлять RefreshRates();
Код:
if (условие открытия ордера селл...)
  (
  RefreshRates();
  OrderSend(Symbol(),OP_SELL,Lot,......)
  }
if (условие открытия ордера бай...)
  {
  RefreshRates();
  OrderSend(Symbol(),OP_BUY,Lot,.........)
  }
 

AlexeyVik

Программист mql4 mql5
Всем привет!
возник вопрос,как прописать в коде открытие ордеров на открытии свечи,того таймфрейма,в окне которого стоит советник(и чтобы его можно было в тестере погонять),набросал кусок кода ниже в общем виде и нужно ли перед OrderSend(...) вставлять RefreshRates();
Код:
if (условие открытия ордера селл...)
  (
  RefreshRates();
  OrderSend(Symbol(),OP_SELL,Lot,......)
  }
if (условие открытия ордера бай...)
  {
  RefreshRates();
  OrderSend(Symbol(),OP_BUY,Lot,.........)
  }
Это как раз тот вариант где надо-бы применить третий вариант.
Типа:
type = условие ? Buy : Sell;
если открывать ордер (type == Buy )
price = Ask;
если открывать ордер (type == Sell)
price = Bid;
OrderSend(_Symbol, type, ……………………………)

Что касается RefreshRates() скажу так: Если открытие выполняется в OnTick() — значит пришёл новый тик и соответственно новые цены и необходимости в обновлении цен нету.
Если-же выполняется по времени, или в достаточно длительном цикле, то лучше цены обновлять.
 
Верх