[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 846

 
serjik77:

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

Только начал учиться этому, а спросить совета не у кого.

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

Никак не могу понять что нужно сделать что бы ордера открылись один раз, а не с каждым тиком

   


Вставьте такую функцию 

 

int ChPos( int type_H_L) 
{
// возвращает кол-во позици которые открыты 
   int i;
   int col;
   int count=0 ;
   for( i=0; i < OrdersTotal(); i++)         
   {
      if(OrderSelect(i,SELECT_BY_POS)==true) 
       {                                   
           if(OrderType()==OP_BUY && type_H_L==OP_BUY && OrderMagicNumber()== magic){count++;}
           if(OrderType()==OP_SELL && type_H_L==OP_SELL && OrderMagicNumber()== magic){count++;}
           if(OrderType()==OP_BUYSTOP && type_H_L==OP_BUYSTOP && OrderMagicNumber()== magic){count++;}
           if(OrderType()==OP_SELLSTOP && type_H_L==OP_SELLSTOP && OrderMagicNumber()== magic){count++;}
           
       }
    }   
return(count);
}

А в своем коде делайте проверку  к примеру так 

if ( SignalLine > MainLine && ChPos(OP_BUY)==0 )
      { // если сигнальная линия выше основной и нет длинной позы . то закрыть короткую открыть длинную
         if (ChPos(OP_SELL)>0 ) ClosePosition(OP_SELL) ;
         OpenPosition(OP_BUY)  ;
 
локирую убыточные позиции, чтобы не нарушать равновессие в локе необходимо у  уже открытых ордеров убрать ТР, но увы, ТР=0, хотя в журнале очень назойливо пишет по многу раз:

2010.09.12 21:34:53 2000.03.06 07:59 money EURUSD,M5: OrderModify error 1

код:

bool notakeprofit()
{   bool ok=true;
    int k=OrdersTotal();
    for (int i=k-1; i >=0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_368)
        {OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(),NormalizeDouble(0,Point), OrderExpiration(), CLR_NONE);
         }
    else;
       // { Print("OrderSelect() error - ",GetLastError()); ok=false;}
    }
return(ok);
}

ввиду того, что необходимо в основном коде убедиться, что у всех рыночных ордеров ТР=0 контролирую результат этой ф-ции - ок, в коде видно, что ок - изменяется только при ошибке

ХЭЛП МИ ПЛЗ! :)

заранее благодарен 

 
abolk:

В моём случае имеет место правило: "НЕ пишется раздельно при существительных, прилагательных и наречиях, если есть или подразумевается противопоставление" http://www.rusyaz.ru/pr/od07.html - "зделать" - пишется НЕ правильно - правильно "сделать" (выделенное слово - противопоставление, перед ним стоит дефис)

вы неправильно(!) толкуете норму русского языка. Раздельно "не" писалось бы в случае:

"зделать" - это НЕ правильно, а плохо. - именно в этом смысле понимается противопоставлене. Посмотрите примеры к правилу.

В вашем предложении НЕ следует писать слитно (применяется пункт 3 параграфа 88 на той же странице):

"зделать" - написано неправильно, правильно "сделать".

 

Вот есть обычный индикатор МАКД . каким образом с его помощью производится тестирование на истории?

может есть пример?

 
IgorM:
локирую убыточные позиции, чтобы не нарушать равновессие в локе необходимо у уже открытых ордеров убрать ТР, но увы, ТР=0, хотя в журнале очень назойливо пишет по многу раз:

код:

ввиду того, что необходимо в основном коде убедиться, что у всех рыночных ордеров ТР=0 контролирую результат этой ф-ции - ок, в коде видно, что ок - изменяется только при ошибке

ХЭЛП МИ ПЛЗ! :)

заранее благодарен

Может не NormalizeDouble(0,Point), а NormalizeDouble(0,Digits) ?!

 
chief2000:

Может не NormalizeDouble(0,Point), а NormalizeDouble(0,Digits) ?!


спс, уже сам нашел, но это не исправило ошибку #1 

 
IgorM:


спс, уже сам нашел, но это не исправило ошибку #1

Я бы первым делом подставил в TP вместо нуля какое-нибудь другое число (для исключения ошибки), чтобы убедиться что причина именно в этом.

 
chief2000:

Я бы первым делом подставил в TP вместо нуля какое-нибудь другое число (для исключения ошибки), чтобы убедиться что причина именно в этом.


  раньше все работало ОК пока не написал эту ф-цию, сейчас вместо OrderModify() вызываю Кимовскую ф-цию:

void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) 

ошибка ушла 

 

есть индикатор типа осма, сигнал с переворотом при пересечении 0. как произвести тестирование на истории?

 
ivandurak:


Вставьте такую функцию

А в своем коде делайте проверку к примеру так

Простите, но если можно, еще вопрос?

Немного начинаю что то понимать,но не все.

Первая функция сообщает программе количество открытых ордеров?

И пожалуйста подскажите как сделать чтобы было постоянно только два отложенных,

независимо от сработавших.