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

 
Zhunko:

Из тиков формировать надо. Периодконвертер минимум из минуток делает.


У Ковалёва всё правильно. Выделил красным, чего у Вас нет.

Понял.Большое спасибо.
 
MauzerVII:

Народ подскажите

Никак не пойму почему строка 

Результат: 2013.04.12 17       13 Print_v4 EURUSD,M15: SL == 1.3068 

выдаёт четыре знака после запятой??? 

Про  DoubleToStr - я в курсе.


 


Раз в курсе, в чем вопрос-то, че не понятно.

 

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

//в шапке
           bool tick.time.local        =               false;
           bool tick.chart.update      =                true;
//в init()
   if(tick.chart.update == true)
     {
     if(MT4InternalMsg == 0)  
            {
            MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); 
            }   
     }  
//в start()
     if(tick.time.local == true)//где менялось, я вообще не понял
       {
       time = TimeLocal();
       }
       else{
       time = TimeCurrent();
       }
//--------------------------------
       if(tick.chart.update == true)
         {
                   hwnd = WindowHandle(sn, 1);
         if(PostMessageA(hwnd, WM_COMMAND, 0x822c, 0) == false)
           {
           hwnd = 0;
           return;
           }
           PostMessageA(hwnd, MT4InternalMsg, 2, 1);             
           }                 
         } 

 Значение назначенных булевых переменных нигде в условиях (и дальше в коде) не меняется. Более того, в start() вообще проверяется на обратное значение назначенной переменной. Но это работает. Как?

 

Или это просто неоптимизированный код? В шапке объявляется замена GetLastError()

#import "ntdll.dll"
 int RtlGetLastWin32Error();
 int RtlSetLastWin32Error (int dwErrCode);

 причём эти функции NaiveAPI нигде дальше в коде не используются...

 

Товарищи программеры, подскажите как решить одну "простую" задачку.

Например нужно удалить вторую строчку в CSV файле. Не нашел в документации инфы о том как это можно сделать.

пример: 

12:30;1;1.34818;12:32;3;3;100;1.34939;18:45\r\n

14:00;1;1.32219;14:26;6;6;100;0.0000;00:00\r\n

19:00;0;1.35828;19:12;12;6;600;1.37939;19:59\r\n 

 
tuner:


Помог бы, но некогда ни о чём другом думать, извини уж.

По поводу вопроса где меняются. Моё предположение - это отладочные флаги, которые использовал программист при написании индикатора и оставил в коде для отладки,  если кому-то будет нужно.

 

 Суть простая. Быстрая машка пересекает медленную. Далее цена откатывает к быстрой машке и тогда эксперт должен открыть ордер.

 На данный момент я написал функцию фиксации отката так:

 

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на указанном баре                                             |
//+-------------------------------------------------------------------------------------+
double GetMA(int index, int maPeriod)
{
   return (iMA(NULL, i_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, index));
}
//+-------------------------------------------------------------------------------------+
//| Имеет ли место отскок?                                                              |
//+-------------------------------------------------------------------------------------+
void IsRebound(int crossDir[], bool& returnSign[])
{
   for (int i = 0; i < 4; i++)
   {
      if (crossDir[i] == CROSS_NO)
         continue;

      returnSign[i] = false;
      double ema = GetMA(1, g_maPeriod[i]);

      if (crossDir[i] == CROSS_UP)
      {
         if (ND(MathAbs(ema - Ask)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;
            Alert("CROSS_UP");
         }
      }
      if (crossDir[i] == CROSS_DN)
      {
         if (ND(MathAbs(ema - Bid)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;
            Alert("CROSS_DN");
         }
      }
   }
}

Подскажите верно ли так? Или нужно как-то иначе?

В массиве crossDir[] хранятся значения о наличии пересечения, если оно есть, значит проверяется зазор между текущей ценой покупки или продажи и значением машки. У меня почему-то условие не выполняется вообще никак.

 

 Вот что мне нужно:

 

откат 

После пересечения любой машкой 365-ую, и как только цена откатиться к соответствующей машке, которая пересекла 365-ую, покупать нужно. КАК ЭТО РЕЛИЗОВАТЬ? 

 

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

ЗЫ Год состоит приблизительно из 250 дневных баров.  

 
 Неужели никто этого не реализовывал. Не думаю что тут очень сложно. Просто у меня опыта ещё не так много, не совсем понимаю как формализовать данный момент ...
 
hoz:
 Неужели никто этого не реализовывал. Не думаю что тут очень сложно. Просто у меня опыта ещё не так много, не совсем понимаю как формализовать данный момент ...

Можно блок-схемой. Можно еще как-нибудь, но очень въедливо и однозначно. Так, чтобы я не имел возможности пнуть Вас за несоответствие замысла его описанию. 

ЗЫ Делать не буду.