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

 

Помогите в решении проблемы. Может я уже всех тут задалбал, но всетаки помогите. Если флаг на преведущем баре 1 разрешается рисовать стрелку в низ. После отрисовки выставляем новый флаг равный -1. В другую сторону наоборот. Но что то я непралиьно делаю. Без коментариев нет стрелок. С коментариями все стрелки.

flag[i] = flag[i+1];             
  if (//flag[i] == 1 && 
//в вниз           
       ma13_0 > ma55_0 && macd[0] >= macd[1] && macd[1] >= macd[2] && macd[2] >= macd[3] && cci15_0 > 50 && cci170_0 > 0)
  {
       S[i] = High[i]+point*Point;                
       flag[i] = -1 ; // флаг показывает нормально пока закоментировано        
  }        
  if (//flag[i] == -1 && 
//в верх          
       ma13_0 < ma55_0 && macd[0] <= macd[1] && macd[1] <= macd[2] && macd[2] <= macd[3] && cci15_0 < 50 && cci170_0 < 0)
  {
       B[i] = Low[i]-point*Point;                
       flag[i] = 1 ;//флаг показывает нормально пока закоментировано         
   }
 
granit77:
А не знаю я. Сергеев знает, он сказал, что вроде правильно. Я бы тоже хотел посмотреть, как это правильно написать.
Я просто поправил немного, чтобы показывало хоть что-то.
- перевел индикатор в сепаратное окно, потом можно вернуть

- массив macd[] висел в воздухе, сделал его индикаторным, увеличил точность
- заремировал Ваше сложное условие на открытие, поставил простое, для наладки
- изменил условие для флага, так хоть как-то работает

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

Спасибо. Посмотрю. Пока я писал преведущий пост вы выложили свой.
 
100yan:

HELP! Подскажите, пож, если закрывать часть позиции (напр. ордер на 1 лот, а закрываем 0.5 лот ) OrderClose должен тикет изменять? У меня на тестере пишет что меняет... Как этого избежать? Ниже кусок кода закрытия...

Никак этого не избежать. Это ДЦ меняет тикет. По сути тут идёт переоткрытие с другим объёмом, отсюда и новый тикет. Поэтому ведите собственный учёт ордеров и после частичного закрытия позиции запоминайте её новый тикет для дальнейшей работы. Либо предусмотрите какую-либо идентификацию частично закрытых позиций для корректного дальнейшего их отслеживания экспертом.
 
artmedia70:
Никак этого не избежать. Это ДЦ меняет тикет. По сути тут идёт переоткрытие с другим объёмом, отсюда и новый тикет. Поэтому ведите собственный учёт ордеров и после частичного закрытия позиции запоминайте её новый тикет для дальнейшей работы. Либо предусмотрите какую-либо идентификацию частично закрытых позиций для корректного дальнейшего их отслеживания экспертом.

Спасибо! А MagicNumber меняется?
 
gince:
Сделал временную отрисовку буфера flag[] - он пустуй, а почему? Где моя ошибка?

у вас ошибка в том, что flag[i+1] - не инициализирован.

поэтому сравнение flag[i]==1 и flag[i]==-1 никогда не выполнится!

 
100yan:

Спасибо! А MagicNumber меняется?
нет
 
100yan:

Спасибо! А MagicNumber меняется?
MagicNumber в этом случае не меняется, если это не предусмотрено кодом советника.
 
DhP:
MagicNumber в этом случае не меняется, если это не предусмотрено кодом советника.
даа??? а это предусмотреть можно ???? покажите пожалуйста как это можно сделать
 
sergeev:
даа??? а это предусмотреть можно ???? покажите пожалуйста как это можно сделать
При частичном закрытии позиции можно изменить магик. Уверен, что Вы это легко сможете написать.
 
sergeev:

у вас ошибка в том, что flag[i+1] - не инициализирован.

поэтому сравнение flag[i]==1 и flag[i]==-1 никогда не выполнится!

Понял так, что у меня нет начальной flag[i+1] установки. Если так, то в каком месте и как это сделать ?

Если установлю 1, то при запуске индикатора, он (индикатор) будет ждать изменения.

flag[i+1]= 1;//начальная установка

for(int i=limit-1;i>=0;i--){ 
   flag[i] == flag[i+1];   
   if ( flag[i] == 1  &&   
        условие продажи){              
       Продажа[i] = High[i]+point*Point; 
       flag[i] == -1 ;
    }                     
    if (flag[i] == - 1  &&     условие покупки){          
              Покупка[i] = Low[i]-point*Point; 
              flag[i] == 1 ;}
    }
}    
Причина обращения: