Помогите с кодом.

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

Тики могут раз в 20-30 секунд приходить, как тогда быть? Наличие трейлинг-стопа выставленного для конкретного ордера вообще нельзя увидеть, ни выставленного этим советником, ни другим способом, разве что через ВинАпи подсмотреть, включён ли трал для него в терминале, это стоп-лосс вобще-то ведь, пока его не выставить, его нету.

К тому же все советники, кроме зацикленных, прекращают свою работу до нового тика безо всякого шаманства, если не ошибаюсь :)

 

Советник должен выставлять ордера НЕ ЧАЩЕ, чем один раз в три секунды. А там - хоть через час, хоть через два. Считайте это моей прихотью. Просто на одном из форумов прочел, что, во-первых, отсутствие частых обращений к серверу есть одно из правил хорошего тона (в моей стратегии такие обращения возможны), а, во-вторых, если советник часто обращается к серверу, то счет может быть заблокирован.

Что касается трейлинга... Мда, у меня вся стратегия именно на этом основана, пока советник ВСЕ открытые позиции в безубыток не вывел, то новые не будет открывать...

А стоп-лосс можно контролировать? По моему алгоритму трейлинг-стоп включается уже тогда, когда график выходит в безубыток. Т.е., например, при прибыли ордера 20 пунктов, советник выставляет трейлинг-стоп 15 пунктов. Тогда априори все ордера с трейлинг-стопами будут иметь уже выставленные стоп-лоссы. И тогда достаточно контролировать наличие стопов.

 
Sem40:

Советник должен выставлять ордера НЕ ЧАЩЕ, чем один раз в три секунды. А там - хоть через час, хоть через два. Считайте это моей прихотью. Просто на одном из форумов прочел, что, во-первых, отсутствие частых обращений к серверу есть одно из правил хорошего тона (в моей стратегии такие обращения возможны), а, во-вторых, если советник часто обращается к серверу, то счет может быть заблокирован.


И это не часто??? Отсутствие частых обращений к серверу - раз в 5-10 минут, не чаще, а "не чаще 1 раза в 3 секунды" рыночный ордер выставлять - чёй-то непонятное. Сомневаюсь что сервер ДЦ будет рад отвечать на запросы клиента чаще 10 раз в минуту :)))

Проверка по времени:

 if(TimeLocal()-OrderOpenTime()<30) continue; //по времени клиентского компа прошло меньше 30 секунд от времени открытия ордера - пропускаем этот ордер без обработки.

Насчёт трала, в кодобазе множество скриптов и советников тралящих ордера с уровнем безубытка, можно любой как пример взять, вот хоть такой:

//--------------------------------------------------------------------
extern int     TrailingStart         = 35;     
extern int     TrailingStop         = 15;     
extern int     Trstep               = 4; 

//--------------------------------------------------------------------
int init()
{
}
//--------------------------------------------------------------------
int deinit()
{
}
//--------------------------------------------------------------------
int start()                                  
{
   double OSL,OOP,SL,TP;
   int OT;
//
   for(int i = OrdersTotal()-1; i >= 0; i--)
   {    
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==Symbol())
         { 
            OT = OrderType(); 
            OSL = OrderStopLoss();
            OOP = OrderOpenPrice();
            TP = OrderTakeProfit();
//
            if(OT == OP_BUY)             
            {  
               if(Bid > (OOP + TrailingStart*Point))
              
               if(Bid > (OSL + (Trstep+TrailingStop)*Point))
                 {
                  SL = NormalizeDouble(Bid - TrailingStop*Point,Digits); 
                  if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(),"   Order Modify Buy   SL ",OSL,"->",SL);
                  else Print("Order Buy Modify   SL ",OSL,"->",SL);
                 } 
            }                                         
            if(OT == OP_SELL)        
            {
               if(Ask < (OOP - TrailingStart*Point))

               if(Ask < (OSL - (Trstep+TrailingStop)*Point))
                 {
                  SL = NormalizeDouble(Ask + TrailingStop*Point,Digits); 
                  if(!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(),"   Order Modify Sell   SL ",OSL,"->",SL);
                  else Print("Order Sell Modify   SL ",OSL,"->",SL);
                 } 
            } 
         }
   }
}
 
Чем именно вам помочь с кодом?
 
evillive:


И это не часто??? Отсутствие частых обращений к серверу - раз в 5-10 минут, не чаще, а "не чаще 1 раза в 3 секунды" рыночный ордер выставлять - чёй-то непонятное. Сомневаюсь что сервер ДЦ будет рад отвечать на запросы клиента чаще 10 раз в минуту :)))

Проверка по времени:

Насчёт трала, в кодобазе множество скриптов и советников тралящих ордера с уровнем безубытка, можно любой как пример взять, вот хоть такой:


Спасибо, но немного не то.

1. Проверка ордеров. Имеется советник, работающий по некоему алгоритму использующему принцип локирования убыточных позиций. Этот алгоритм выводит по одному все открытые ордера в безубыток, выставляя после достижения некоей прибыли трейлинг-стоп. После того, как советник закончил работу с ордером и выставил трейлинг-стоп, он может "забыть" о нем (ордер в безубытке и боятся, что он упадет в минус не надо, по любому он закроется с плюсом) и выставлять новые ордера. Думаю, что теперь понятно почему я выбрал именно в качестве критерия проверки наличие трейлинга. Локирующие ордера не имеют его, и, следовательно, если есть ордера без трейлинга, то новые ордера выставляться не должны.

2. По времени 3 секунды. Я консультировался со службой технической поддержки ДЦ, где мне сказали, что в принципе они вообще не имеют ничего против ЛЮБОЙ частоты обращений к серверу (хоть несколько тысяч в секунду), но они не гарантируют на таких частотах обращения безсбойной работы. Наиболее оптимальным для моего VPS и их сервера они назвали как раз цифру не чаще одного ордера в три секунды. Еще раз повторяю, НЕ ЧАЩЕ!!! через два часа, через месяц - можно. Через 2,5 секунды - возможны сбои. Ну про время Вы мне дали скрипт. Небольшая доработка - и все нормально. Спасибо Вам за это.

А вот про трейлинг - думаю, что теперь Вам ясно, что это немного не то, что я ищу...

А где кодобаза? дайте ссылочку плз.

 
Sem40:


А где кодобаза? дайте ссылочку плз.



https://www.mql5.com/ru/code
 

Спасибо!
Причина обращения: