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

 
Уважаемые программисты. Мне как новичку алгоритм писать сложно, отредактировать могу, поэтому помогите, пожалуйста. Буду очень и очень благодарен!!!
Такой простой советник и для него нужно:

Если выполняется условие1, то:
-проверить наличие открытых ордеров по SELL
-если есть - закрыть их
-можно сделать проверку на наличие средств на счете
-открыть ордер на BUY

То же самое если выполняется условие2, то:
-проверить наличие открытых ордеров по BUY
-если есть - закрыть их
-можно сделать проверку на наличие средств на счете
-открыть ордер на SELL
+ анализ ошибок(не главное, но можно)
Это все по текущей валютной паре.

int start()                       
  {
   double M_0, M_1,               // Значение MAIN на 0 и 1 барах
          S_0, S_1;               // Значение SIGNAL на 0 и 1барах
//--------------------------------------------------------------------
                                  // Обращение к функции техн.индикат.
   M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,  0);// 0 бар
   M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,  1);// 1 бар
   S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);// 0 бар
   S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);// 1 бар
//--------------------------------------------------------------------
                                  
   if( M_1 < S_1 && M_0 >= S_0 )  // УСЛОВИЕ 1: Зеленая пересекает красную снизу
     
   if( M_1 > S_1 && M_0 <= S_0 )  // УСЛОВИЕ 2: Зеленая пересекает красную сверху
     
//--------------------------------------------------------------------
   return;                            // Выход из start()
  }
 
добрый день! скажите, пожалуйста, можно ли внутри функции присвоить значение нескольким глобальным переменным, и где в таком случае эти переменные надо объявить?
 
ideasforlife:
Уважаемые программисты. Мне как новичку алгоритм писать сложно, отредактировать могу, поэтому помогите, пожалуйста. Буду очень и очень благодарен!!!
Такой простой советник и для него нужно:

Если выполняется условие1, то:
-проверить наличие открытых ордеров по SELL
-если есть - закрыть их
-можно сделать проверку на наличие средств на счете
-открыть ордер на BUY

То же самое если выполняется условие2, то:
-проверить наличие открытых ордеров по BUY
-если есть - закрыть их
-можно сделать проверку на наличие средств на счете
-открыть ордер на SELL
+ анализ ошибок(не главное, но можно)
Это все по текущей валютной паре.

На стохастике в CodeBase много советников. Посмотреть и переделать
 
ideasforlife:
Уважаемые программисты. Мне как новичку алгоритм писать сложно, отредактировать могу, поэтому помогите, пожалуйста. Буду очень и очень благодарен!!!
Такой простой советник и для него нужно:

Если выполняется условие1, то:
-проверить наличие открытых ордеров по SELL
-если есть - закрыть их
-можно сделать проверку на наличие средств на счете
-открыть ордер на BUY

То же самое если выполняется условие2, то:
-проверить наличие открытых ордеров по BUY
-если есть - закрыть их
-можно сделать проверку на наличие средств на счете
-открыть ордер на SELL
+ анализ ошибок(не главное, но можно)
Это все по текущей валютной паре.

А ещё проще будет разобрать пример с учебника: https://book.mql4.com/ru/samples/expert.

Разве это так сложно прочитать учебник от корки до корки?

 
ideasforlife:
Уважаемые программисты. Мне как новичку алгоритм писать сложно, отредактировать могу, поэтому помогите, пожалуйста. Буду очень и очень благодарен!!!
Такой простой советник и для него нужно:

Если выполняется условие1, то:
-проверить наличие открытых ордеров по SELL
-если есть - закрыть их
-можно сделать проверку на наличие средств на счете
-открыть ордер на BUY

То же самое если выполняется условие2, то:
-проверить наличие открытых ордеров по BUY
-если есть - закрыть их
-можно сделать проверку на наличие средств на счете
-открыть ордер на SELL
+ анализ ошибок(не главное, но можно)
Это все по текущей валютной паре.


Готовое решение - в варианте учебника-здесь. Убираете все, что касается MACD - здесь и все... :-Р

П.С. Там даже имена переменных практически совпадают. Читайте учебник - там и описание и все остальное есть. :-Р

 
Roman.:


Готовое решение - в варианте учебника-здесь. Убираете все, что касается MACD - здесь и все... :-Р

П.С. Там даже имена переменных практически совпадают. Читайте учебник - там и описание и все остальное есть. :-Р

Я первей! :-P :-P
 
Code:

Здравствуйте, уважаемые форумчане.

Конечно, порция вопросов от новичка. Пытаюсь вникать в mql4, до этого программ никогда не делал, поэтому вопросы могут оказаться совсем примитивными. Но самому никак не получается.

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

Вот код. Если будут еще замечания по другим оплошностям в коде, буду только рад.


Какой смысл будет нести данный индикатор? Зачем он такой вообще нужен?


Зачем Вам такая характеристика:

ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;

или же она, но уже раскрытая:

ExtVolumesBuffer[i]=Volume[i]+(Volume[i]+Volume[i+1])/(2-(Close[i]-Open[i+1])*1000);

???


А по поводу оплошностей в коде. Ваши строчки

double dVolume=Volume[i];
double vback1=Volume[i+1];

         {
         double vteor12=(dVolume+vback1)/2;
            if (Close[i+1]>Open[i+1] && Close[i]>Open[i]) double UP12=(Close[i]-Open[i+1])*1000; else UP12=0;
            if (UP12!=0) double vrealUP12=(dVolume+vback1)/UP12; else vrealUP12=0;
            if (Close[i+1]>Open[i+1])
            if (Close[i]>Open[i])
            ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;
            if (ExtVolumesBuffer[i]<0) ExtVolumesBuffer[i]=0;
              }

эквиваленты следующим:

double dVolume=Volume[i];
double vback1=Volume[i+1];

double vteor12=(dVolume+vback1)/2;
if (Close[i+1]>Open[i+1] && Close[i]>Open[i])
{
   double UP12=(Close[i]-Open[i+1])*1000;
   double vrealUP12=(dVolume+vback1)/(Close[i]-Open[i+1])*1000;
   ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;
   if (ExtVolumesBuffer[i]<0)
      ExtVolumesBuffer[i]=0;
}
else
{
   UP12=0;
   vrealUP12=0;
}

Смотришь на оптимизированный код и думаешь зачем вообще введено столько переменных? И зачем их "иначе" обнулять?

Если бы Я понял идею индикатора, тогда Я бы может и смог помочь Вам.

 
MaxZ:

Какой смысл будет нести данный индикатор? Зачем он такой вообще нужен?


Зачем Вам такая характеристика:

или же она, но уже раскрытая:

???


А по поводу оплошностей в коде. Ваши строчки

эквиваленты следующим:

Смотришь на оптимизированный код и думаешь зачем вообще введено столько переменных? И зачем их "иначе" обнулять?

Если бы Я понял идею индикатора, тогда Я бы может и смог помочь Вам.


Спасибо за ответ и отвечаю на Ваши вопросы.

Та самая характеристика - это как раз вся идея индикатора. А заодно упражнение по MQL. Придумал себе задачу, интуитивно понимаю, что ее реализация на языке не очень сложная. Сижу, пробую.

Так вот, суть характеристики состоит в том, что я сравниваю некий фиксированный теоретический  уровень двух однонаправленных объемов с фактическим уровнем. Т.е., если фактические отношение суммы двух объемов к фактическому интервалу "открытие-закрытие" выше заданного теоретического, я добавляю к фактическому второму объему "бонус" в виде разницы между посчитанным теоретическим и фактическим результатами. Если фактический уровень ниже теоретического, отнимаю от объема второго бара такую же разницу. Внятно ли получилось объяснить?

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

Кроме того, мне кажется, что те строки, которые Вы считаете эквивалентными моим приведут к делению на ноль. Сейчас буду проверять. 

 

Всем привет!

Благодаря неоценимой помощи экспертов этой ветки (особенно Roman'а) мне удалось состряпать простенький советник, показавший + на тестере. Вопрос: как определить можно ли его выставлять на реал? Есть ли какие-либо критерии?

 
MaxZ:
Я первей! :-P :-P

Ваша сциль не туда вовсе... совсем к не тем торговым критериям, вопрос-то о СТО-ХАС-ТИ-КЕ... :-Р