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

 
nuan:

charter значит что закрывает ордер не через 30 минут а в ту же секунду.


В коде поставил как у тебя в примере


По другим причинам робот никак не закрывает, т.е. не по стопу не по профиту.


1 2011.07.29 00:00 buy 1 0.01 1.4328 1.3328 1.5328 0.00 1000.00
2 2011.07.29 00:01 close 1 0.01 1.4327 1.3328 1.5328 -0.10 999.90
3 2011.07.29 00:01 buy 2 0.01 1.4329 1.3329 1.5329 0.00 999.90
4 2011.07.29 00:01 close 2 0.01 1.4326 1.3329 1.5329 -0.30 999.60
5 2011.07.29 00:01 buy 3 0.01 1.4328 1.3328 1.5328 0.00 999.60
6 2011.07.29 00:03 close 3 0.01 1.4327 1.3328 1.5328 -0.10 999.50
7 2011.07.29 00:03 buy 4 0.01 1.4329 1.3329 1.5329 0.00 999.50
8 2011.07.29 00:03 close 4 0.01 1.4329 1.3329 1.5329 0.00 999.50


Поставьте, все это в самом конце функции start(). Ваши операции должны стоять перед этим.

datetime TimeM30=iTime(NULL,30,0);
    if(TimeM30==prevtime) return(0); 
    prevtime = TimeM30;   
    CloseAllPosTime();
 
nuan:
Замените в старте() на этот вариант:
 datetime CloseTime;
//=====================
 int start(){

   if(TimeCurrent()-CloseTime > 30*60){CloseAllPos();CloseTime=TimeCurrent();}//Можно поставить в любом месте функции старт.
  return(0);
 }
//====================
 
forexnew:

Я понял.

А если считать открытие счета на 0 долларов - началом, а 1-е пополнение баланса - доливкой. Можно определить программно все доливки (в том числе и первую), которые были сделаны на счет?


:-Р

Вы не в ту сторону гребете... :-)))

Есть ф-ия

double AccountBalance( ) 

с ее помощью Вы определяете состояние баланса торгового счета по закрытым сделкам на какой-либо момент времени.

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

 
CloseTime 
Нужно задавать этот параметр? если да то как?
 
nuan:


Не надо. Это "промежуточная" переменная времени, всегда равная времени последнего закрытия.

Время срабатывания устанавливается в секундах. В Вашем случае это 30*60.
Можете 30 заменить на некую переменную, скажем, exstern int closetime = 30.
Тогда время срабатывания будет выглядеть так: closetime*60.

 
charter:


Не надо. Это "промежуточная" переменная времени, всегда равная времени последнего закрытия.

Время срабатывания устанавливается в секундах. В Вашем случае это 30*60.
Можете 30 заменить на некую переменную, скажем, exstern int closetime = 30.
Тогда время срабатывания будет выглядеть так: closetime*60.

Только что попробовал тоже самое, находится в конце тела старт.... Почему такое не понимаю. Может еще вариантик есть?
 
Roman.:


:-Р

Вы не в ту сторону гребете... :-)))

Есть ф-ия

с ее помощью Вы определяете состояние баланса торгового счета по закрытым сделкам на какой-либо момент времени.

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


Если Вы изначально определили соотношение StartBalance (стартового баланса) к StarLots (стартовому лоту) согласно установленных рисков, тогда размер доливки надо определить из эквити:

if(AccountEquity()<StartBalance) Доливка = (AccountBalance()+(StartBalance-AccountEquity()))*Новый лот/StarLots

Это без учета AccountCredit(). Если я Вас, конечно, правильно понял.

 
nuan:
Только что попробовал тоже самое, находится в конце тела старт.... Почему такое не понимаю. Может еще вариантик есть?
Ищите ошибку в чем-то другом.
Оба варианта должны работать.
 
спасибо нашел!
 

Всем привет. У меня к вам такой вопрос. Мне нужно найти ближайший максимум и минимум. Но чтобы они были в пределах + - 10 пунктов от Open[0];

У меня сейчас так:

for (int i=1;i<100;i++)

if (High[i+1]<High[i] && High[i]>High[i-1] break;

он находит ближайший максимум,

если я добавляю сравнение High[i]>(Open[0]+0.0010) и High[i]<(Open[0]+0.0020) вот как это выглядит:

if (High[i+1]<High[i] && High[i]>High[i-1] && High[i]>(Open[0]+0.0010) && High[i]<(Open[0]+0.0020) break;

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

С минимумом пока вообще не пробовал.