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



Зарегистрирован: 03.03.2008
Сообщения: 180
Откуда: Мурманск

СообщениеДобавлено: Чт Апр 24, 2008 10:33 pm Ответить с цитатой Вернуться к началу

Уважаемые!
Может кто подскажет, как тут расставить скобочки в команде if else
В Хелпе нет примера, чтобы после else, был снова if
На словах задача старая: Есть входные условия, от которых получаются разные режимы (mode), это получается.
Надо чтобы при возникновении нового режима, если система конечно не в рынке, система например покупала по своим (другим) правилам, определяемым режимом.
Режим 1 - свой набор правил купить продать (Для примера)
Режим 2 - Свой набор правил (другой)
Основу брал из топика торговля на разных фреймах.
Там почему то сначала проверяется sell,
Может все таки сделать сначала Buy? - У меня редактор ругается, что некоторые переменные не определены... (SellPrice=BuyPrice+100)
Этот редактор, он ходит по циклу, или тупо подряд?
Т.к. BuyPrice, определена позже, вот он и ругается.
Пример для 2-х условий.
До того определены условия для Mode1,Mode2…
Для Buy1, Buy2…
Для Sell1, Sell2…

If(inmarket=0)
If(Sys1=0)
If(Mode1=1)
If (Buy1=1)

inMarket=1;
Sys1=1;
Buy=Buy1;

If(inmarket=0)
If(Sys2=0)
If(Mode2=1)
If (Buy2=1)

inMarket=1;
Sys2=1;
Buy=Buy2;

Else

If(inmarket=1)
If(Sys1=1)
If(Mode1=1)
If (Sell1=1)

inMarket=0;
Sys1=0;
Sell=Sell1;

If(inmarket=1)
If(Sys2=0)
If(Mode2=1)
If (Sell2=1)

inMarket=0;
Sys2=0;
Sell=Sell2;

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

Спасибо!

_________________
"Единственная pабота, достойная нас, — pабота над собой". Шон де Уоppен
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Апр 24, 2008 11:23 pm Ответить с цитатой Вернуться к началу

В данном случае If else надо обязательно использовать внутри цикла for()
Кроме того там был очень специфический случай с разными фреймами. Если бы не смена фреймов, что все надо было делать по другому(без if).

If(inmarket=0) надо писать так If(inmarket==0)

Как скобки расставлять смотри в файле справки по оператору if. Там есть несколько примеров.

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



Зарегистрирован: 03.03.2008
Сообщения: 180
Откуда: Мурманск

СообщениеДобавлено: Пт Апр 25, 2008 6:57 am Ответить с цитатой Вернуться к началу

000 писал(а):
В данном случае If else надо обязательно использовать внутри цикла for()
Кроме того там был очень специфический случай с разными фреймами. Если бы не смена фреймов, что все надо было делать по другому(без if).

If(inmarket=0) надо писать так If(inmarket==0)

Как скобки расставлять смотри в файле справки по оператору if. Там есть несколько примеров.

Я то чего повелся: Ты как то писал, что цикл не нужен..
В Примерах нет вариантов, когда после else снова идет If...
У Меня другой случай, можно без if?
Цикл For... Нужен? ( В этом конкретном случае)
Если с циклом, почему у тебя проверка начинается с Sell? - По факту, сначала открывается позиция.
Редактор, он ходит с проверкой по циклу, или тупо все подряд строчки проверяет?
Last, but not Least
Если у меня полный бред, то дай хотя бы намек, идею...
Или ссылку, на применение if else, без цикла, For чтобы после else были снова If...
Олег, понятно, что до хрена вопросов. Идею выдайSmile
С уважением,
S.Y.

_________________
"Единственная pабота, достойная нас, — pабота над собой". Шон де Уоppен
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Апр 25, 2008 8:09 am Ответить с цитатой Вернуться к началу

if(123)
{
456;
}
else if(789)
{
098;
}
else if(765)
{
543;
}
else(210)
{
109;
}

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



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

СообщениеДобавлено: Чт Май 01, 2008 1:57 pm Ответить с цитатой Вернуться к началу

Всех с праздником!!! Олег привет, подскажи пожалуйста по коду, никогда не пользовался IF, смысл в том чтобы количество лотов при покупке и шорте было Lots1, при продаже и восстановлении из шорта Lots2, в файл выводится при одновременном откупе шорта и покупке (система реверсивная) количество равное Lots2, а нужно чтобы строчка на откуп шорта содержала количество равное Lots2, а строчка на покупку Lots1. Чего я не так делаю?

Lots1=...;
Lots2=...;


B=IIf(Buy==1,1,0);
S=IIf(Sell==1,1,0);
SH=IIf(Short==1,1,0);
CR=IIf(Cover==1,1,0);
if (B=1) {
Lots= Lots1;
}

if (S=1) {
Lots= Lots2;
}
if (SH=1) {
Lots= Lots1;
}
if (CR=1) {
Lots= Lots2;
}
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Май 01, 2008 9:36 pm Ответить с цитатой Вернуться к началу

В том виде как есть в коде сразу 2 принципиальные ошибки.
1. if(B=1) следует писать if(B==1) или просто if(B)
2. функция If не может работать с массивами, а В в данном случае массив

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

Наиболее универсальный код наверное будет примерно такой

Код:

LotsBuy = ; // задаем размер лота на покупку и закрытие покупки
LotsShort = ; // задаем размер лота на короткую продажу и её закрытие

Lots = Buy*LotsBuy + Cover*LotsShort - Sell*LotsBuy - Short*LotsShort;

Таким образом будет вычислен суммарный лот в зависимости от сигналов на торгуемом баре.

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



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

СообщениеДобавлено: Пт Май 02, 2008 1:04 am Ответить с цитатой Вернуться к началу

000 писал(а):
В том виде как есть в коде сразу 2 принципиальные ошибки.
1. if(B=1) следует писать if(B==1) или просто if(B)
2. функция If не может работать с массивами, а В в данном случае массив

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

Наиболее универсальный код наверное будет примерно такой

Код:

LotsBuy = ; // задаем размер лота на покупку и закрытие покупки
LotsShort = ; // задаем размер лота на короткую продажу и её закрытие

Lots = Buy*LotsBuy + Cover*LotsShort - Sell*LotsBuy - Short*LotsShort;

Таким образом будет вычислен суммарный лот в зависимости от сигналов на торгуемом баре.

"В случае переворотной системы только первый вход осуществляется одинарным лотом, а все остальные сделки всегда двойным, что приводит к закрытию открытой позиции и открытию противоположной"
Ты прав, но эти условия написаны для варианта с системой записи в файл взятой у меха, там количество лотов для для каждого случая sell buy cover short одинарное просто в случае реверсивной системы в файл записывыется две строки для каждого из сигналов с одинарным количеством равным количеством, например если cover и buy то тупо пишется две строки с префиксом "B" и одинаковым количеством лотов, а мне нужно чтобы также писалось две строки но с разным количеством лотов для buy и short Lots1, для Sell и Cover Lots2
Посмотреть профиль Отправить личное сообщение
Сергей



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

СообщениеДобавлено: Пт Май 02, 2008 1:58 am Ответить с цитатой Вернуться к началу

Вопрос снимается, проблема решена. Все дело в том что помимо покупки продажи решил прикрутить менеджемент по портфелю)
Посмотреть профиль Отправить личное сообщение
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пт Май 02, 2008 12:15 pm Ответить с цитатой Вернуться к началу

Сергей писал(а):
Вопрос снимается, проблема решена. Все дело в том что помимо покупки продажи решил прикрутить менеджемент по портфелю)


Т.е. в зависимости от просадки системы и тех убытков которые готов терпеть, вычесляеш размер лотов в позе, я так никогда не делаю, поэтому хочу спросить, сколько риск-менеджмент позволяет тебе использовать депо на систему (можно грубо в проценте, понимаю что это будет частный случай) и формулу вычесления там как понимаю больше всего влияет размер стопа и какой процент просадки дэпо ты выбрал. Не совсем понял зачем вычеслять лот при каждой операции buy и sell, вроде размер позы должен меняться, ее закрытие должно соответствовать открытию. Ну и есно чем все закончилось, в смысле формул.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen