Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 вопрос по использованию переменных Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
AC



Зарегистрирован: 05.02.2010
Сообщения: 6

СообщениеДобавлено: Вт Фев 09, 2010 3:07 pm Ответить с цитатой Вернуться к началу

Добрый день!

помогите пожалуйста разобраться с таким вопросом

есть код
varbuy= 0;
varsell=0;

for(i = 1; i < BarCount; i++)
{
Buy = условие покупки;
Sell = условие продажи;

ifbuy1 = iif(buy[barcount-1]==1,1,0);
ifbuy2 = iif(buy[barcount-2]==1,1,0);
ifsell1 = iif (sell[barcount-1]==1,1,0);
ifsell2 = iif (sell[barcount-2]==1,1,0);

if (ifbuy1) {
if (varbuy=0) {
makeandsave("B",1,price);
varbuy=1;
varsell=0;
}
}

if (ifbuy2) {
if (varbuy=0) {
makeandsave("B",1,price);
varbuy=2;
varsell=0;
}
}

if (ifsell1) {
if (varsell=0) {
makeandsave("S",2,price);
varbuy=0;
varsell=1;
}
}

if (ifsell2) {
if (varsell=0) {
makeandsave("S",2,price);
varbuy=0;
varsell=2;
}
}


}

при прогоне кода не должно совершаться две подряд покупки или продажи, т.к. проверяется значение переменных varbuy var sell

но это происходит!?

в данном примере я сознательно не привел оператор exrem
так как мне надо понять как задействовать здесь переменные

Буду благодарен за любые коментарии
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Фев 09, 2010 10:52 pm Ответить с цитатой Вернуться к началу

Скорее всего дело в том, что
Код:

if (varbuy=0)

надо писать так
Код:
if (varbuy == 0)


Кроме того не понравилось, что
Buy = условие покупки;
Sell = условие продажи;
внутри цикла
и вот этому в цикле делать нечего
ifbuy1 = iif(buy[barcount-1]==1,1,0);
ifbuy2 = iif(buy[barcount-2]==1,1,0);
ifsell1 = iif (sell[barcount-1]==1,1,0);
ifsell2 = iif (sell[barcount-2]==1,1,0);

И еще. Неужели очень трудно код размещать на форуме в таком виде?
Код:

varbuy  = 0;
varsell = 0;

for(i = 1; i < BarCount; i++)
{
  Buy = условие покупки;
  Sell = условие продажи;

  ifbuy1  = IIf(Buy[BarCount-1]  == 1, 1, 0);
  ifbuy2  = IIf(Buy[BarCount-2]  == 1, 1, 0);
  ifsell1 = IIf(Sell[BarCount-1] == 1, 1, 0);
  ifsell2 = IIf(Sell[BarCount-2] == 1, 1, 0);

  if (ifbuy1) {
    if (varbuy == 0) {
      makeandsave("B",1,price);
      varbuy  = 1;
      varsell = 0;
    }
  }

  if (ifbuy2) {
    if (varbuy == 0) {
      makeandsave("B",1,price);
      varbuy  = 2;
      varsell = 0;
    }
  }

  if (ifsell1) {
    if (varsell == 0) {
      makeandsave("S",2,price);
      varbuy  = 0;
      varsell = 1;
    }
  }
 
  if (ifsell2) {
    if (varsell == 0) {
      makeandsave("S",2,price);
      varbuy  = 0;
      varsell = 2;
    }
  }
}

Для этого при написании поста надо использовать Code. Там вверху есть кнопка такая. В конце кода при написании сообщения должно быть [/code], а в начале [code]

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
AC



Зарегистрирован: 05.02.2010
Сообщения: 6

СообщениеДобавлено: Ср Фев 10, 2010 12:24 am Ответить с цитатой Вернуться к началу

Добрый день!

вот это не совсем понятно почему
000 писал(а):

Кроме того не понравилось, что
Buy = условие покупки;
Sell = условие продажи;
внутри цикла
и вот этому в цикле делать нечего
ifbuy1 = iif(buy[barcount-1]==1,1,0);
ifbuy2 = iif(buy[barcount-2]==1,1,0);
ifsell1 = iif (sell[barcount-1]==1,1,0);
ifsell2 = iif (sell[barcount-2]==1,1,0);


Спасибо за ответ, но вопрос не снялся.

Привожу тестируемый код

Код:


for (i = 1;  i <BarCount>1) AND (Cb1 OR Cs1 OR Cb2 OR Cs2 ) ) {

if (Cb1)   {
  if (b_var==0) {
    price=(1+Otstup/100)*Close[BarCount-1];
    makeandsave("B1",1,price);
    b_var=1;
    s_var=0;
  }
}

if (Cb2) {   
 if (b_var==0) {
   price=(1+Otstup/100)*Close[BarCount-1];
   makeandsave("B2",1,price);
   b_var=2;
   s_var=0;
 }   
}

if (Cs1)  {
 if (s_var==0) {
   price=(1-Otstup/100)*Close[BarCount-1];
   makeandsave("S1",2,price);
   b_var=0;
   s_var=1;
  }
}
 
if (Cs2) {
 if (s_var==0) {
   price=(1-Otstup/100)*Close[BarCount-1];
   makeandsave("S2",2,price);
   b_var=0;
   s_var=2;
  }
}


}



здесь специально в makeandsave забито S1 S2 B1 B2
Код:

   makeandsave("S2",2,price);


чтобы по tri файлу видеть по какому месту прошлась программа

в tri файле получаю следующие записи (при прогоне на Bar Replay)
Код:

TRANS_ID=11288103700;PRICE=71.77;QUANTITY=1000;OPERATION=B1;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=SBER03; ACCOUNT=L01-00000F00; CLIENT_CODE=21861;
TRANS_ID=11288103800;PRICE=72.10;QUANTITY=1000;OPERATION=B2;CLASSCODE=EQBR; ACTION=NEW_ORDER; TYPE=L; SECCODE=SBER03; ACCOUNT=L01-00000F00; CLIENT_CODE=21861;


т.е. не смотря на мое условие из переменных последовательно выполняются две покупки
такое впечатление, что он присваивает значения переменным, а потом его обнуляет

я уже всю голову сломал, что не так
пробовал присваивать значения переменным в теле цикла как писал в предыдущем сообщении, и вне его, но это не дало результат

просмотр прошлого более чем на 1 бар нужен, так как делаю системку типа zig zag

буду очень признателен за любую помощь

заранее извиняюсь если что не так по оформлению сообщения
Посмотреть профиль Отправить личное сообщение
AC



Зарегистрирован: 05.02.2010
Сообщения: 6

СообщениеДобавлено: Ср Фев 10, 2010 12:28 am Ответить с цитатой Вернуться к началу

в догонку по предыдущему посту

никак не смог корректно вбить свой afl код

отображается не то, что я ввожу редактируя сообщение

часть AFL кода просто "съелась"

прошу прощения
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Фев 10, 2010 12:38 am Ответить с цитатой Вернуться к началу

Цитата:

отображается не то, что я ввожу редактируя сообщение

часть AFL кода просто "съелась"

Ага. Бывает такой глюк... В таком случае лучше прикреплять afl код к сообщению.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Фев 10, 2010 12:52 am Ответить с цитатой Вернуться к началу

В общем напиши вот так.
Код:

SetBarsRequired(10000, 0);

ifBuy1 = условие покупки;
ifBuy2 = Ref(ifBuy1, -1);
ifSell1 = условие продажи;
ifSell2 = Ref(ifSell1, -1);

Buy1 = Sell1 = 0;
varbuy  = 0;
varsell = 0;

for(i = 1; i < BarCount; i++)
{
  if (ifbuy1 AND varbuy == 0) {
    Buy1 = 1;
    varbuy  = 1;
    varsell = 0;
  }
  if (ifbuy2 AND varbuy == 0) {
    Buy1 = 1;
    varbuy  = 2;
    varsell = 0;
  }

  if (ifsell1 AND varsell == 0) {
    Sell1 = 1;
    varbuy  = 0;
    varsell = 1;
  }
  if (ifsell2 AND varsell == 0) {
    Sell1 = 1;
    varbuy  = 0;
    varsell = 2;
  }
}

if(Buy1[BarCount-1] == 1)
  makeandsave("B",1,price);
if(Sell1[BarCount-1] == 1)
  makeandsave("S",2,price);

Логику понял исходя из кода. Но там ошибки есть (в логике)

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen