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

 
rosomah:

ДЦ в одностороннем порядке увеличил стоп аут с 1-2% до 15%. Обнаружил это случайно. Предполагаю что могут быть и другие подлянки, в виде увеличения спреда, заморозки или каких-либо изменений. Кто-либо видел советник, который сигнализирует Алерт, после любого изменения параметров? Придётся написать.

Господа, какие ещё данные можно запрашивать в ДЦ, помимо тех, которые я вставил в скрипт? 

Не исключено, что это нормальное явление по пятницам перед уходом на выходные... У Вас ещё по Божески процент выставлен.

Всё должно быть прописано в торговом соглашении...

Скрипт Ваш не смотрел, но, например, на новостях (перед выходом) Альпари расширяет спред.

 
Roman.:

Не исключено, что это нормальное явление по пятницам перед уходом на выходные... У Вас ещё по Божески процент выставлен.

Всё должно быть прописано в торговом соглашении...

Скрипт Ваш не смотрел, но, например, на новостях (перед выходом) Альпари расширяет спред.



Вот я и напишу уже советник, куда загоню все возможные данные о ДЦ и счёте. При любом телодвижении сразу Алерт.

И всё же не могу найти предельное количество ордеров позволяемое выставлять в ДЦ. Тупо зарядить 1000 отложенников и тут же, автоматом снять их, по нахождении предела?

 
rosomah:


1.Вот я и напишу уже советник, куда загоню все возможные данные о ДЦ и счёте. При любом телодвижении сразу Алерт.

2. И всё же не могу найти предельное количество ордеров позволяемое выставлять в ДЦ. Тупо зарядить 1000 отложенников и тут же, автоматом снять их, по нахождении предела?

1. Алерт не поможет. Надо заносить эти параметры окружения в участок кода, отвечающий за выполнение сработки торговых критериев и если какой-либо из  этих параметров превышает своё предельно допустимое (выставленное Вами) значение, то тогда уже принимать соответствующее решение.  (например, отказываться от сделки... - совершения торговой операции)

2. Нет. Это называется из пушки по воробьям, так не надо делать, ИМХО  - читайте регламент и торговые условия. Если этого нет, то звоните в тех поддержку и телефоном уточняйте инфу  у местных поваров по ВСЕМ подобным вопросам на Вашем типе торгового счёта.

 

Здравствуйте.

Целый день сижу над кодом - выдаёт, падла, ошибку 131. Код должен перебирать все рыночные ордера и на каждом витке того же цикла перечитывать объём открытых ордеров для символа выбранного ордера. В случае, если объёмы buy и sell позиций для одного символа различны - открывается локирующий ордер на оставшийся объём.

     int i;
     int ii;
     string SMB="";
     double Price=0;
     double PriceAsk=0;
     double PriceBid=0;
     double SchBuyLotsSMB=0;
     double SchSellLotsSMB=0;
     double MarketLotSMB=0;
     for (i=OrdersTotal()-1;i>=0;i--)
      {
       if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         Alert ("Ошибка ",GetLastError()," выбора ордера!");
         Print ("Ошибка ",GetLastError()," выбора ордера!");
        }
       else
        {
         SMB=OrderSymbol();
         PriceAsk=MarketInfo(SMB,MODE_ASK);
         PriceBid=MarketInfo(SMB,MODE_BID);
         for (ii=OrdersTotal()-1;ii>=0;ii--)
          {
           if (!OrderSelect(ii, SELECT_BY_POS, MODE_TRADES))
            {
             Alert ("Ошибка ",GetLastError()," выбора ордера!");
             Print ("Ошибка ",GetLastError()," выбора ордера!");
            }
           else
            {
             if(OrderSymbol()==SMB)
              {
               if(OrderType()==OP_BUY)
                {
                 SchBuyLotsSMB=SchBuyLotsSMB+OrderLots();
                }
               if(OrderType()==OP_SELL)
                {
                 SchSellLotsSMB=SchSellLotsSMB+OrderLots();
                }
              }
            }
          }
         MarketLotSMB=SchBuyLotsSMB-SchSellLotsSMB;
         if (MarketLotSMB<0)
          {
           MarketLotSMB=MathAbs(MarketLotSMB);
           Price=PriceAsk;
           OPENORDER ("Buy",SMB,MarketLotSMB,Price);
          }
         else
          {
           if (MarketLotSMB>0)
           Price=PriceBid;
           OPENORDER ("Sell",SMB,MarketLotSMB,Price);
          }            
        }
       SMB="";
       Price=0;
       PriceAsk=0;
       PriceBid=0;
       SchBuyLotsSMB=0;
       SchSellLotsSMB=0;
       MarketLotSMB=0;        
      }

 Помогите, пожалуйста, найти, в чём тут дело. 131 - я читал - связана с ошибкой нахождения объёма. Но хоть убейте - я её не вижу.

Заранее благодарю за ответ. 

 
TarasBY:
Вы странно используете цикл в цикле перебора ордеров, НО это право автора, тогда перед вторым циклом обнуляйте показания суммарных лотов (SchBuyLotsSMB и SchSellLotsSMB).
Так я же их обнуляю.
 
nemo811:

Здравствуйте.

Целый день сижу над кодом - выдаёт, падла, ошибку 131. Код должен перебирать все рыночные ордера и на каждом витке того же цикла перечитывать объём открытых ордеров для символа выбранного ордера. В случае, если объёмы buy и sell позиций для одного символа различны - открывается локирующий ордер на оставшийся объём.

 Помогите, пожалуйста, найти, в чём тут дело. 131 - я читал - связана с ошибкой нахождения объёма. Но хоть убейте - я её не вижу.

Заранее благодарю за ответ. 


А где у вас слиппаж? Может, эта причина!
 
Кстате говоря, код работает корректно, если ордера открыты по одному символу и сам советник запущен на этом символе. Если открыты ордера по 2 и более парам или советник запущен на символе, по которому ордеров нет, - идёт ошибка.
 
borilunad:

А где у вас слиппаж? Может, эта причина!

Имеете в виду 

Sleep (1000);

 ?

Пробовал - не помогает. 

 
nemo811:
Так я же их обнуляю.
Не сразу заметил. Как вариант (я бы делал обязательно), сделать нормализацию значения лота, передаваемого в тоговую функцию.
 
TarasBY:
Не сразу заметил. Как вариант (я бы делал обязательно), сделать нормализацию значения лота, передаваемого в тоговую функцию.
Была такая мысля. Ща попробую. Благодарю.
Причина обращения: