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

 
artmedia70:

Вам же сразу написали в чём причина. Дело не в i++ или i--, а в том, с какого конца начать удалять ордера - с начала списка (как вы) или с конца списка (как нужно в данном случае)

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

Когда удаляете сначала первый ордер (он индексируется i=0), то индексы всех ордеров смещаются в массиве - тот, который был первым, становится нулевым, второй становится первым, третий - вторым и т.д. Потому и происходит не полное удаление всех ордеров - ведь когда i становится равным 6, шестой ордер смещается на пятую позицию в массиве ордеров и ордер просто не выбирается по индексу 6.

Когда же вы удаляете ордера с конца списка, то смещения не происходит - первый ордер как имел нулевую позицию в списке, так и будет её иметь. 10-й ордер имел позицию 9, он был удалён, далее удаляется 9-й ордер, который имеет позицию в списке 8 и т.д. до первого ордера с позицией ноль в массиве ордеров.

БОЛЬШОЕ СПАСИБО за развёрнутый ответ artmedia70, просто спасибо - ilunga ... ну и nadya за участие тоже ... всег благ ...
 
Подскажите, пожалуйста, настроил мультивалютник на работу с несколькими валютами из одного окна. Но проблема в том, что переключение между валютами происходит настолько быстро, что не успевает открыться ордер. За 3 минуты открылось 4 ордера + 4 отложенных. А переключений между валютами произошло очень много.
 
volshebnik:
Как же лучше и чем ? )
Делать уникальные имена и запоминать их. Я не знаю Вашей задачей, может Вам этого и не надо.
 
forexnew:
Подскажите, пожалуйста, настроил мультивалютник на работу с несколькими валютами из одного окна. Но проблема в том, что переключение между валютами происходит настолько быстро, что не успевает открыться ордер. За 3 минуты открылось 4 ордера + 4 отложенных. А переключений между валютами произошло очень много.

http://vinin.ucoz.ru/forum/11
 

есть 2 пользовательских модификации Mod_1 и Mod_2

в обоих случаях условие модификации:

double TS;
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);

if (TS < Min_Dist)
TS=Min_Dist;

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

а для селл, стоп лосс больше трейл стопа

 

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

Помогите, пожалуйста, найти ошибку.

Нижеприведённый код не работает на тестере, в то время как на демке такой проблемы нет. В журнале ошибок нет.

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

  //====================== Отлавливаем прибыль по рынку ===========================================
  if (RinProfit) {
    if(SchBuyLots>0 || SchBuyLots777>0)
     {
      if((SchSellStop_b(MAGIC)>0 && (maM_fast<maM_slow || maH_fast<maH_slow || maOtk_fast<maOtk_slow)) ||
         (SchSellStop_b(MAGIC)>0 && (speedup_H1_ff<(10000+H1_MA_factor_ff) || speedup_H1_ss<(10000+H1_MA_factor_ss) ||
                                     speedup_M15_ff<(10000+M15_MA_factor_ff) || speedup_M15_ss<(10000+M15_MA_factor_ss))) ||
         (SchSellStop_b(MAGIC)>0 && ((maHXX<=H1_point_min  && speedup_H1_ss<(10000+H1_MA_factor_ss)) || maHXX>=H1_point_max)) ||
         (SchSellStop_b(MAGIC)>0 && Fractal_fibo_buy>Fibo_prohibit) ||
         (SchSellStop_b(MAGIC)>0 && TF1S>0 && TF2S>0 && timf1s!=0 && timf2s!=0 && TF1S<TF2S) ||
         (SchSellStop_b(MAGIC)>0 && TF1S>0 && TF2S>0 && timf1s!=0 && timf2s!=0 && TF1S>=TF2S && Bid<price_S))
       {
        while (SchBuyLots+SchBuyLots777>0 && SchSellLots+SchSellLots777>0)
         {
          CloseVstrechnye(MAGIC);
          return (0);
         }
        CloseAll_bMAGIC(Proskalz, MAGIC);
        CloseAll777_b(Proskalz);
        DeleteOtlozhMAGIC(MAGIC);
        DeleteOtlozh777();
        Alert("Позиции Buy закрыты согласно рыночной ситуации.");
        RefreshRates();
        if (Timeout_Trade>0 && ProfHist<=0)
         {
          Comment (SMB,": ТАЙМАУТ ТОРГОВЛИ "); 
          Sleep (Timeout_Trade*60000);
         } 
        RefreshRates();
       }
    }
    if(SchSellLots>0 || SchSellLots777>0)
     {
      if((SchBuyStop_b(MAGIC)>0 && (maM_fast>maM_slow || maH_fast>maH_slow || maOtk_fast>maOtk_slow)) ||
         (SchBuyStop_b(MAGIC)>0 && (speedup_H1_ff>(10000-H1_MA_factor_ff) || speedup_H1_ss>(10000-H1_MA_factor_ss) ||
                                    speedup_M15_ff>(10000-M15_MA_factor_ff) || speedup_M15_ss>(10000-M15_MA_factor_ss))) ||
         (SchBuyStop_b(MAGIC)>0 && ((maHXX<=H1_point_min  && speedup_H1_ss>(10000-H1_MA_factor_ss)) || maHXX>=H1_point_max)) ||
         (SchBuyStop_b(MAGIC)>0 && Fractal_fibo_sell>Fibo_prohibit) ||
         (SchBuyStop_b(MAGIC)>0 && TF1B>0 && TF2B>0 && timf1b!=0 && timf2b!=0 && TF1B>TF2B) ||
         (SchBuyStop_b(MAGIC)>0 && TF1B>0 && TF2B>0 && timf1b!=0 && timf2b!=0 && TF1B<=TF2B && Bid>price_B))
       {
        while (SchBuyLots+SchBuyLots777>0 && SchSellLots+SchSellLots777>0)
         {
          CloseVstrechnye(MAGIC);
          return (0);
         }
        CloseAll_bMAGIC(Proskalz, MAGIC);
        CloseAll777_b(Proskalz);
        DeleteOtlozhMAGIC(MAGIC);
        DeleteOtlozh777();
        Alert("Позиции Sell закрыты согласно рыночной ситуации.");
        RefreshRates();
        if (Timeout_Trade>0 && ProfHist<=0)
         {
          Comment (SMB,": ТАЙМАУТ ТОРГОВЛИ "); 
          Sleep (Timeout_Trade*60000);
         } 
        RefreshRates();
       }
     } 
   }
  //===============================================================================================  
 

Чем отличается вызов функций из dll в MT4 от MT5? Компилирую dll, в MT5 замечательно работает, а в MT4 выдает ошибку:

2011.10.06 23:00:34 Solaris executor EURUSDm,M1: cannot call function 'InfoOfTrading' from dll 'Solaris.dll' (error 127)

Что за батва? - весь мозх уже поламал. :(

 
делайте проект Win32 dll
 
sergeev:
делайте проект Win32 dll
но в MT5 нормально же пашет!
 

Продолжу свой вышеизложенный вопрос.

Указанный выше код также задействован мною ещё в одном советнике. С тем советником была ситуация, подобная описанной с той лишь разницей, что условия кода соблюдались с точностью до наоборот (на демке, опять же, всё работало без ошибок). Однако в один прекрасный момент тестер заработал корректно и код стал работать соответственно заложенным в него условиям.

Прям мистика какая-то.

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