Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 52

 

Привет всем! только сегодня начал изучение языка. не пойму как написать что бы всегда проверялось условие.

Если цена за промежуток времени t (указывается пользователем в секундах до дробных чисел с одним знаком после запятой, например 15,5 сек.) падает на количество пунктов n (указывается пользователем как целое число например 5), советник открывает sell

спасибо!

 
Здоровти всем. Возникла потребность в качественном генераторе случайных котировок хотя бы по типу геометрического броуновского движения либо (в идеале)))) функции Вейерштрасса-Мандельброта со стохастическим показателем Херста. Потребность возникла из-за выходных, надо отлаживать индюк на ценовом ряде. Скриптом iTicks не обойдусь. Кто-то уже пытался реализовать подобное или придётся писать самостоятельно? Поиск по сайту ничего не дал, но возможно искомое просто называется как-то по другому чем так, по каким ключевым словам ищу...
 
expmaestro:

Привет всем! только сегодня начал изучение языка. не пойму как написать что бы всегда проверялось условие.

Если цена за промежуток времени t (указывается пользователем в секундах до дробных чисел с одним знаком после запятой, например 15,5 сек.) падает на количество пунктов n (указывается пользователем как целое число например 5), советник открывает sell

спасибо!

Вот этот алгоритм. Учитесь на примерах.
 
спасибо, попробую разобраться. надеюсь что это действительно то что мне нужно
 
expmaestro:
спасибо, попробую разобраться. надеюсь что это действительно то что мне нужно

Был уверен что Lucky основан на озвученном принципе, но оказалось, что это не так. Тогда пробуйте такую схему:

extern int ShiftSec = 15;
extern int ShiftPips = 10;
//IIIIIIIIIIIIIIIIIII======Глобальные переменные советника======IIIIIIIIIIIIIIIIIIIIII+
datetime   gdt_NewTime;
double     gda_Price[0][2];
int        gi_size;
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|                  Custom expert initialization function                            |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void init()
{
//----
    gi_size = 0;
//---- 
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|                  Custom expert deinitialization function                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void deinit()
{
//----
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|                  Custom expert iteration function                                 |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void start()
{       
//----
    if (gdt_NewTime == TimeCurrent()) return;
    gdt_NewTime = TimeCurrent();
    if (gi_size < ShiftSec) {ArrayResize (gda_Price, gi_size + 1); gi_size++;}
    else
    {
        //---- Это схема к которой нужно добавить управление ордерами
        if (gda_Price[0][0] - Bid > ShiftPips * Point)
        //---- Открываемся BUY
        if (Ask - gda_Price[0][1] > ShiftPips * Point)
        //---- Открываемся SELL
        //---- Сдвигаем массив цен на 1 вниз
        double lda_tmp[][2];
        ArrayResize (lda_tmp, gi_size);
        ArrayCopy (lda_tmp, gda_Price);
        int li_IND0, li_IND1;
        for (li_IND0 = 0; li_IND0 < gi_size - 1; li_IND0++)
        {
            for (li_IND1 = 0; li_IND1 < 2; li_IND1++)
            gda_Price[li_IND0][li_IND1] = lda_tmp[li_IND0+1][li_IND1];
        }
    }
    //---- Собираем цены
    gda_Price[gi_size-1][0] = Bid;
    gda_Price[gi_size-1][1] = Ask;
//----
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
Работоспособность кода нужно проверять. Временной промежуток рассчитывается кратно 1 секунде. Уменьшить временной промежуток - не ко мне.
 

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

Предположим что тип переменной bool - если я правильно понимаю, то нужно будет всего 2 клавиши на одну переменную: получится TRUE или FALSE.

 

Мне надо по одной и той же функции но с разными переменными рассчитать значения ячеек у 2-х похожих массивов. Массивы одномерные.

Как такую функцию записать? Так можно?

Расчет_Массива(Массив_1, 5.0, 6.0);                       // Вызов функции

void Расчет_Массива(double array[], double A, double B)   // Сама функция
  {
   for (i=0; i<10; i++)
     {
      array[i]= A+B*i;
     }
  }

И возможно ли подобное делать с более многомерными массивами? - 2-х, 3-х мерными.

--------------

Добавил амперсанд (&)

void Расчет_Массива(double& array[], double A, double B)   // Сама функция

и заработала... : ))) Только я не знаю зачем он нужен - просто по аналогии (методом тыка) попробовал. Если расскажете, буду рад узнать. : ))

 
Chiripaha:

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

Предположим что тип переменной bool - если я правильно понимаю, то нужно будет всего 2 клавиши на одну переменную: получится TRUE или FALSE.

Может библиотека поможет?

 // 2.2.3. Функция управляет горячими клавишами терминала МТ4.
 void ServiceMetaTraderHotKeys(int nKeyMode, // Код клавиши-модификатора. Может быть только предопределённым значением из:
                                             // VK_SHIFT, VK_LSHIFT, VK_RSHIFT, VK_CONTROL, VK_LCONTROL, VK_RCONTROL, VK_MENU, VK_LMENU, VK_RMENU, VK_LWIN, VK_RWIN.
                               int nKey);    // Код дополнительной клавиши.

 // 4.1.2. Функция управляет горячими клавишами на указанном графике.
 void ServiceChartHotKeys(int hwndChart, // Системный дескриптор окна, на котором применяются горячие клавиши.
                          int nKeyMode,  // Код клавиши-модификатора. Может быть только предопределённым значением из:
                                         // VK_SHIFT, VK_LSHIFT, VK_RSHIFT, VK_CONTROL, VK_LCONTROL, VK_RCONTROL, VK_MENU, VK_LMENU, VK_RMENU, VK_LWIN, VK_RWIN.
                          int nKey);     // Код дополнительной клавиши.
Это описания из новой версии. В копилке по-другому параметры расположены.
 
Zhunko:

Может библиотека поможет?

Это описания из новой версии. В копилке по-другому параметры расположены.

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