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

 
подскажите, тестер стратегий имеет какие-то ограничения по кол-ву проходов? Запустил тестер, слева внизу над полосой в начале тестирования было: 0/1280 (25706). Я посчитал, 25 косарей - это кол-во всевозможных комбинаций. Но тестирование он закончил когда было:1088/1280 (25706). Получается что он сделал только 1088 проходов? Что вообще обозначают первые две цифры?
Более того, он как-то странно считает... когда добавил ещё один критерий на 3 параметра, то 25 штук не увеличились в 3 раза, а выдало что-то около 40 косарей. Глюк ли это или я где не прав?
 
AndrejFX:
подскажите, тестер стратегий имеет какие-то ограничения по кол-ву проходов? Запустил тестер, слева внизу над полосой в начале тестирования было: 0/1280 (25706). Я посчитал, 25 косарей - это кол-во всевозможных комбинаций. Но тестирование он закончил когда было:1088/1280 (25706). Получается что он сделал только 1088 проходов? Что вообще обозначают первые две цифры?
Более того, он как-то странно считает... когда добавил ещё один критерий на 3 параметра, то 25 штук не увеличились в 3 раза, а выдало что-то около 40 косарей. Глюк ли это или я где не прав?
читайте мануал. там подробно персонально.
 

Помогите разобраться с трейлингом!!!

Должен тралить уже открытые StopLoss-ы на расстояние "TrailingStop", от уровня High или Low, предыдущих свечек. После запуска эксперта работает только с ордером на первой открытой сделке. После срабатывания StopLoss-а и открытии следующей сделки, ордер StopLoss не тралится. Если я правильно понимаю, это из-за того что переменная "ORDER_SL" не изменяется и не выполняется условие на изменение ордера!? А если так, то почему и как исправить?

Вот код трала:

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);
int ORDER_Type=OrderType();
double ORDER_SL=OrderStopLoss();
double Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*Point;
double Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*Point;
            if (ORDER_Type==OP_BUY && ORDER_SL<Point_High){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }
            if (ORDER_Type==OP_SELL && ORDER_SL>Point_Low){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }

Вот советник полностью:

Файлы:
 

Этот код

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);

надо бы в перлы поместить. Самое интересное, что он работает, правда только в тестере на первом ордере.

 
Christoff:

Помогите разобраться с трейлингом!!!

Должен тралить уже открытые StopLoss-ы на расстояние "TrailingStop", от уровня High или Low, предыдущих свечек. После запуска эксперта работает только с ордером на первой открытой сделке. После срабатывания StopLoss-а и открытии следующей сделки, ордер StopLoss не тралится. Если я правильно понимаю, это из-за того что переменная "ORDER_SL" не изменяется и не выполняется условие на изменение ордера!? А если так, то почему и как исправить?

Вот код трала:

Вот советник полностью:

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

Примерно так:

void Trailing(string sy, int mn) 
{
   int      i, err, ORDER_Type, k=OrdersTotal();
   double   PointX, ORDER_SL, Point_High, Point_Low;
 
   if (sy=="0") sy=Symbol();
   int    dg=MarketInfo(sy, MODE_DIGITS);
   double pt=MarketInfo(sy, MODE_POINT);
   
   if(dg==5 || dg==3) PointX=pt*10;
   if(dg==4 || dg==2) PointX=pt;
   
   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (OrderMagicNumber()!=mn)   continue;
               
         ORDER_Type=OrderType();
         ORDER_SL=OrderStopLoss();
         Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*PointX;
         Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*PointX;
         if (ORDER_Type==OP_BUY)
            if (NormalizeDouble(Point_High-ORDER_SL,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         if (ORDER_Type==OP_SELL)
            if (NormalizeDouble(ORDER_SL-Point_Low,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         }
      if (!OrderSelect(i, SELECT_BY_POS)) {
         err=GetLastError();
         Print("FUNC Trailing: Ошибка выбора ордера - ", err);
         break;
         }
      }
   return;
}

Код вашего трала не смотрел, оставил как есть (хотя там тоже нужно править - добавить проверку на не превышение уровня StopLevel, а может и ещё что-нить), добавил только цикл по ордерам и нормализацию при сравнении double-величин в вашем коде трала, ну и так ... некоторые полезности ... Захотите разобраться - разберётесь :)

ЗЫ. Код не проверял, писал как есть, так что могут быть ошибки. Это только пример.

Теперь, в том месте кода, где нужно тралить позиции, вызывайте данную функцию:

Trailing(Symbol(), Magic);
Magic - магический номер, заданный в советнике как уникальное любое целое число, чтобы он отличал свои ордера от ордеров другого советника или от открытых вручную, где магик вообще отсутствует.
Если оставить Symbol() при вызове функции, то тралиться будут позиции того валютного инструмента, на котором стоит советник.
Либо, вместо Symbol() вставляйте название валютной пары, позиции которой хотите тралить.
 
Помогите пожалуста наладить обмен данными, самым быстрым способом, между терминалами МТ4, на одном компе.
 
trave:
Помогите пожалуста наладить обмен данными, самым быстрым способом, между терминалами МТ4, на одном компе.

Если нужо копирование сделок, то вот копировщик. Если просто обмен даными, то нужно делать dll-ку
Файлы:
kopirowshik.zip  465 kb
 
drknn:

Если нужо копирование сделок, то вот копировщик. Если просто обмен даными, то нужно делать dll-ку

С выходом Вас... :-)))
 
Vinin:

Не стоит на этом форуме выкладывать украденное. Это дорога к бану

это в переносном смысле, этот индюк доработан мною.
 
Roman.:
С выходом Вас... :-)))
Владимир, раз ты выложил подборку, то видимо занимался этим вопросом.
Не встречал готового простенького варианта передачи одной переменной из терминала в терминал через память, переменную Windows, и пр., то есть, не через файл?
Как конечный вариант, индикатор, который на одном терминале онлайн рисует линию Close[0] с другого терминала. На тиковом графике это сравнение смотрелось бы очень наглядно.
Причина обращения: