[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 19

 
Всем доброго дня. Нужен робот который будет отслеживать сделки и при закрытии именно по тэйкпрофиту создавать отложенный ордер в замен закрытого с такими же параметрами как у закрытого. Возможна ли реализация подобного робота? Никогда с роботами ними не сталкивался и не работал. Если есть такой где-то то просьба дать ссылочку. Заранее благодарен.
 
Раньше закрытие по прибыли было в валюте депозита и считалась так
double Lot = 0.1;
int KoffProfit = 10;
ProfitValue = Lot * KoffProfit * MarketInfo(Symbol(), MODE_TICKVALUE); 
как эту формулу переделать в пункты?
 

Задаюсь вопросом оптимизации кода для ускорения работы совы в тестере. Подскажите пожалуйста как быстрее исполняется цикл, так:

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;
   
   // работаем с ордерами      
}

или например так:

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (OrderSelect(i, SELECT_BY_POS)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
      // работаем с ордерами
      }
   }
}

и есть еще какие то советы по ускорению советника?

 
T-G:Раньше закрытие по прибыли было в валюте депозита и считалась так
как эту формулу переделать в пункты?
эту формулу нет смысла переделывать, проще найти нужный ордер (OrderSelect()) и вычислить (OrderOpenPrice()-Bid)/Point ( или OrderOpenPrice()-Ask) и получите сколько пипсов уже имеет ордер
T-G:и есть еще какие то советы по ускорению советника?

в mql4 идет полная проверка условий, т.е. все выражение которое находится в скобках if() будет проверенно до конца, поэтому иногда целесообразно разбивать сложные условия на несколько условий:

if(a>b && c>d) можно заменить на if(a>b){ if (c>d)..... }

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

 
IgorM:

в mql4 идет полная проверка условий, т.е. все выражение которое находится в скобках if() будет проверенно до конца, поэтому иногда целесообразно разбивать сложные условия на несколько условий:

if(a>b && c>d) можно заменить на if(a>b){ if (c>d)..... }

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

понятно. спасибо. а скажите Print например после закрытие ордера:

Rez = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), iSlippage, Blue);
if (Rez) Comment("Закрыт ордер # ", OrderTicket(), "  прибыль ", OrderProfit());

или та же нормализация в условиях:

if (NormalizeDouble(dOrderOpenPriceBuyStop - StepTral * Point, Digits) > NormalizeDouble(Ask + Step * Point, Digits))

сильно замедляет исполнение процесс выполнения советников?

 
T-G:или та же нормализация в условиях:

сильно замедляет исполнение процесс выполнения советников?

попробуйте проверить самостоятельно с помощью GetTickCount(), создайте скрипт и выполните нормализацию один раз 10 000 раз и выполнить нормализацию 2 раза 10 000 раз, тогда можете оценить насколько целесообразно для Вас искать участки кода где часто выпоняется нормализация. Насчет Print() даже затрудняюсь ответить - у Вас разве Printы каждый тик будут выводиться? обычно операции вывода сильно замедляют работу эксперта, скрипты с Comment() выполняются раз в 10 дольше чем без вывода, но опять же вопрос в целесообразности - если надо, значит надо.
 
T-G:

понятно. спасибо. а скажите Print например после закрытие ордера:

или та же нормализация в условиях:

сильно замедляет исполнение процесс выполнения советников?

Операция Print() - это операция с файлом (в данном случае лог-файлом). А эти операции О-ОЧЕНЬ медленные (по сравнению с обработкой данных из памяти). ВЫХОД: создавать переменную, инициализируемую в init()

bool gb_VirtualTrade;
init()
{
    gb_VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode));
}

И принтовать по условию этой переменной (это ОДИН ИЗ вариантов).

Пример нормализации, приведённый Вами, если исходить из озвученных задач (оптимизация работы кода), не имеет смысла. Нормализация НЕОБХОДИМА по техническим требованиям сервера ДЦ, чтобы был принят на исполнение торговый приказ ТОЛЬКО цены и СТОПов.

 
Здравствуйте, вопрос, при работе эксперта в его коде для открытия позиции надо прописать индикатор(условие) на сигналах которого открывается ордер или в эксперте прописывается путь к окну фин. инструмента на котором установлены индикаторы?
 

Уважаемые спекулянты, помогите! Ищу советник, который при открытии позиции автоматически выставляет SL и TP.

Заранее благодарен.

 
Добрый день. Если кто знает, подскажите где можно скачать индикатор ЗИГЗАГ, который отмечает точку появления нового луча ( например другим цветом). Если такой вообще есть...