Автор |
Сообщение |
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
burnus писал(а): |
commenced писал(а): |
А я откуда знаю, код ты не давал вроде |
Да тама 4 линии
Ну возьмём любые наугад и обзовём их как у меня:
Код: |
trend=Plot( DEMA( C, 200 ), "" ,colorRed, styleLine );
InputLine1=Plot( EMA( C, 100 ), "", colorBlue, styleLine );
Inputline2=Plot( MA( C, 70 ), "", colorBlack, styleLine );
Outline=Plot( TEMA( C, 40 ), "", colorGreen, styleLine );
; |
|
странная запись. Проверять нечего.
Код: |
trend= DEMA( C, 200 );
InputLine1=EMA( C, 100 );
Inputline2=ma( C, 70 );
Outline=TEMA( C, 40 ); |
отрисовка
Код: |
Plot(trend, "trend", 6, 1);
Plot(InputLine1, "InputLine1", 7, 1);
Plot(Inputline2, "Inputline2", 8, 1);
Plot(Outline, "Outline", 9, 1); |
|
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем так. В коде вроде ошибок нет. В прочем, как уже сказано смысла городить огород с циклом тоже нет.
Не понравилось, что применено 2 цикла (это будет тормозить код). В принципе можно и лонг и шорт упаковать в один цикл. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Наврал. Ошибка есть. И очень серьезная. И при лонге и шорте position = 1. Так нельзя. Надо при шорте сделать например -1 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Как то так.
Код: |
CondLong = C > trend AND C>InputLine1 AND Hour() >= 5 & Hour() <= 14; //условие в длинную
OutBuy = C < OutLine AND Hour() >= 5 & Hour() <= 20;//условия выхода из длинной
CondShort = C < trend AND C < InputLine2 AND Hour() >= 5 & Hour() <= 14;//условие в короткую
OutShort = C > OutLine AND Hour() >= 5 & Hour() <= 20;// условие на выход из короткой
//общий цикл
Buy = CondLong;
Sell = 0;
Short = CondShort;
Cover = 0;
position = 0;
for( i = 1; i < BarCount; i++ )
{
if(position == 0) { // если система не в рынке
Sell[i] = 0;
Short[i] = 0;
if(Buy[i]) {
position = 1; // открыта длинная позиция
}
else if(Sell[i]) {
position = -1; // открыта короткая позиция
}
}
else if(position == 1) { // система в лонге
Sell[i] = 0;
Buy[i] = 0;
if(OutBuy[i]) {
Sell[i] = 1; // выход из длинной
position = 0; // система не в рынке
}
}
if(position == -1) { // система в шорте
Sell[i] = 0;
Buy[i] = 0;
if(OutShort[i] == 1) {
Cover[i] = 1; // выход из длинной
position = 0; // система не в рынке
}
}
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
000 писал(а): |
Наврал. Ошибка есть. И очень серьезная. И при лонге и шорте position = 1. Так нельзя. Надо при шорте сделать например -1 |
С другой стороны там перед вторым циклом идет обнуление position
Получится, что система может быть одновременно и в лонге и в шорте... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
burnus
Зарегистрирован: 29.03.2009
Сообщения: 5
Откуда: владивосток
|
000 писал(а): |
000 писал(а): |
Наврал. Ошибка есть. И очень серьезная. И при лонге и шорте position = 1. Так нельзя. Надо при шорте сделать например -1 |
С другой стороны там перед вторым циклом идет обнуление position
Получится, что система может быть одновременно и в лонге и в шорте... |
Спасибо. Попробую немного по другому. |
|
|
Посмотреть профиль Отправить личное сообщение AIM Address Yahoo Messenger MSN Messenger |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
Ребят подскажите как в цикле выход в конце дня. Где ошибка в коде?
Код: |
day_=day();
for(i = 1; i<BarCount-1; i++)
{
....
if( Day_[i]!=Day_[i+1]) // выход в конце текущего дня
{
Sell[i] = 1; // продажа
position = 0; // система не в рынке
SellPrice[i] = C[i];
}
}
|
|
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да вроде все правильно.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Амиброкеровец
Зарегистрирован: 30.12.2008
Сообщения: 214
Откуда: Воображляндия
|
000 писал(а): |
Да вроде все правильно.... |
Да, действительно все верно!! |
_________________ Антон |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Жжош |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
Все привет! Я использую 14 дневный ATR и не знаю как его подружить с циклом. Проблема в том что 14 первых баров ATR = null; а цикл стартует сразу и получаеться фигня. Setbarsreqiured - не помогает. Как моглабы выглядеть проверка типа: Если ATR = null - ждемс, если не null - работаемс.
заранее спасибо |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А не проще начать цикл с 14 бара ? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
Разумеется проще, очень даже логично, но, если я например, смотрю дневной график, и i = Period_ATR, что еще более логично чем просто i = 14, я уже не могу посмотреть часовики, потому что ATR считается все равно за дневные бары (timeframeset) и что бы было правильно нужно делать i = Period_ATR * 24. Об этом я забыл написать в предыдущем сообщении. Как бы вот этот процесс автоматизировать ? что бы не добавлять/удалять все время "*24" и производные (например "*3600") |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем я все равно не понял в чем проблема, ну ладно
А почему бы тогда не использовать функцию IsNull()?
Типа так
atr = IIf(IsNull(ATR(14)), 0, ATR(14)); |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
IsNull() мне помог спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|