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



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

СообщениеДобавлено: Сб Фев 28, 2015 5:51 pm Ответить с цитатой Вернуться к началу

000 писал(а):
В каком месте?

записываю значение переменной в файл через fputs. такой же её вижу, если выводить через _Trace. Те, начиная с какого-то числа разрядов, амиброкер переводит число в экспотенциальную нотацию.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Фев 28, 2015 6:37 pm Ответить с цитатой Вернуться к началу

Преобразуй в текст функцией NumToStr()

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



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

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

Всем привет, возникла проблема с написанием цикла :

Хочу сделать подобие функции iif , но с накоплением значений при соблюдение условия.

y=0;
iif(x<24,y+=1,y=0)

Что нужно :

если ref(x,-1)<24 and x<24
то y=2
если ref(x,-2)<24 and ref(x,-1)<24 and x<24
то y=3
и т.д. пока соблюдается условие x<24
если x>24 то y = 0


вот что вышло:

i=0;
y=0;
while (i < BarCount )
{

// Вот в этом месте трудность , не знаю как сделать без перечисления каждого бара
if(x[i]<24) {y[i]++;
if (x[i+1]<24) {y[i+1]++;
if (x[i+2]<24) {y[i+2]++;
if (x[i+3]<24) {y[i+3]++;
if (x[i+4]<24) {y[i+4]++;
if (x[i+5]<24) {y[i+5]++;
if (x[i+6]<24) {y[i+6]++;
// + Нужно чтобы проверялись значения x на всех барах, а не только до x[i+6]

}}}}}}}

i++;
}

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


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

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

А зачем там цикл?
Код:

Cond = X < 24;
Bars = BarsSince(Cond AND !Ref(Cond, -1)) + 1;
Y = Sum(1, Bars);
Y = IIf(Cond == 0, 0, Y);

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


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

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

Ну а если цикл то так
Код:

Cond = X < 24;
Y = 0;
for( i = 1; i < BarCount; i++ )
{
   if(Cond[i])
      Y[i] = Y[i-1] + 1;
   else
      Y[i] = 0;
}

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



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

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

Забыл про BarsSince , спасибо
Посмотреть профиль Отправить личное сообщение
rilax



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

СообщениеДобавлено: Пн Мар 23, 2015 3:05 pm Ответить с цитатой Вернуться к началу

Добрый день.
Помогите плиз.
У меня есть торговая система основанная на пересечений двух прямых:
Buy=Cover=Cross(tl1,tl2);
Sell=Short=Cross(tl2,tl1);
И есть импульсная система Элдера(https://www.amibroker.com/library/detail.php?id=585)
Можно ли как то, при формировании сигнала на покупку моей системой проверить, если бар имеет синии цвет(Impulse_Up) то совершать покупку, если же красный(Impulse_Down) или белый (Impulse_None), то запомнить, что сигнал на покупку уже есть и на первом же последующем синем баре совершить покупку?
Заранее благодарю.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Мар 23, 2015 3:54 pm Ответить с цитатой Вернуться к началу

Вот сразу вопрос.
Ну запомнили мы сигнал и ждем синий цвет. Как долго можно ждать?
Может синий цвет через год только появится? И что, отрабатывать сигнал через год?

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



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

СообщениеДобавлено: Пн Мар 23, 2015 5:13 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Вот сразу вопрос.
Ну запомнили мы сигнал и ждем синий цвет. Как долго можно ждать?
Может синий цвет через год только появится? И что, отрабатывать сигнал через год?

Извиняюсь что сразу об этом не написал, 10 свечей будет вполне достаточно, хотя этот параметр я думаю можно будет подкорректировать в ходе тестов.
Еще выяснил такую особенность:
1) Система находиться в состоянии лонг.
2) Поступает сигнал на продажу, текущий бар белый или синий, ждем красную свечу.
3) Пока мы ее ждем система выдает уже сигнал на покупку и свеча синяя(или допустим другого цвета), но так как изначально система была в лонге (пункт 1), следовательно необходимо аннулировать сигнал на продажу и последующий после него сигнал на покупку.

Получается что заявка на продажу и пришедшая встречная заявка на покупку взаимоуничтожаются.

Попробовал приложить скрин, на нем описанная ситуация выделена желтым цветом.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Мар 23, 2015 6:03 pm Ответить с цитатой Вернуться к началу

Типа так.
Код:

Buy1 = Cover1 = Cross(tl1,tl2);
Sell1 = Short1 = Cross(tl2,tl1);

Long = Flip(Buy1, Short1); // когда система в лонге/шорте по первоначальным сигналам

waitingBuy = Hold(Buy1, 10) AND Long == 1; // держим сигнал 10 баров после сигнала ЛОНГ но только до выхода из лонга
waitingShort = Hold(Short1, 10) AND Long == 0; // держим сигнал 10 баров после сигнала ШОРТ но только до выхода из шорта

Buy = waitingBuy AND Impulse_Up;
Short = waitingShort AND Impulse_Down;

Спрашивай если что то непонятно.

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



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

СообщениеДобавлено: Пн Мар 23, 2015 7:17 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Типа так.
Код:

Buy1 = Cover1 = Cross(tl1,tl2);
Sell1 = Short1 = Cross(tl2,tl1);

Long = Flip(Buy1, Short1); // когда система в лонге/шорте по первоначальным сигналам

waitingBuy = Hold(Buy1, 10) AND Long == 1; // держим сигнал 10 баров после сигнала ЛОНГ но только до выхода из лонга
waitingShort = Hold(Short1, 10) AND Long == 0; // держим сигнал 10 баров после сигнала ШОРТ но только до выхода из шорта

Buy = waitingBuy AND Impulse_Up;
Short = waitingShort AND Impulse_Down;

Спрашивай если что то непонятно.


Есть небольшая проблема, после формирования сигнала допустим на покупку, система дожидается первого зеленого бара, но на этом не останавливается и на последующих барах зеленого цвета сигнал на покупку сохраняется(на протяжении 10 баров). Есть предположение , что после первого зеленого бара, нужно обнулить счетчик.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Мар 23, 2015 7:29 pm Ответить с цитатой Вернуться к началу

Я не стал обнулять сигнал, т.к. тестер это сделает сам.
Если надо, то используй функцию ExRem()

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



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

СообщениеДобавлено: Пн Мар 23, 2015 7:37 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Я не стал обнулять сигнал, т.к. тестер это сделает сам.
Если надо, то используй функцию ExRem()


Спасибо!
Все заработало.
Очень Вам благодарен.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Мар 23, 2015 7:54 pm Ответить с цитатой Вернуться к началу

Замечательно. Я рад.

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



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

СообщениеДобавлено: Чт Апр 02, 2015 12:13 pm Ответить с цитатой Вернуться к началу

Добрый день, уважаемые знатоки!
Написал такой вот кусок кода.

Код:

for(i=1;i<BarCount;i++)
{
fb1 = TimeFrameGetPrice("O", inDaily, -2); // открытие позавчера
lb1 = TimeFrameGetPrice("C", inDaily, -2); // закрытие позавчера
fb2 = TimeFrameGetPrice("O", inDaily, -1); // открытие вчера
lb2 = TimeFrameGetPrice("C", inDaily, -1); // закрытие вчера
fb = TimeFrameGetPrice("O", inDaily, 0); // открытие сегодня

priceDayMax = TimeFrameGetPrice("H", inDaily, -1); // вчерашний макс
priceDayMin = TimeFrameGetPrice("L", inDaily, -1); // вчерашний мин
perRost1[i] = PerIzm(fb1[i], lb1[i]); // функция
perRost2[i] = PerIzm(fb2[i], lb2[i]); // функция

}

AddColumn(fb1, "fb1", 1.4);
AddColumn(lb1, "lb1", 1.4);
AddColumn(fb2, "fb2", 1.4);
AddColumn(lb2Open, "lb2Open", 1.4);
AddColumn(lb2, "lb2", 1.4);
AddColumn(fb , "fb", 1.4);
AddColumn(priceDayMax , "priceDayMax", 1.4);
AddColumn(priceDayMin , "priceDayMin", 1.4);
AddColumn(perRost1 , "perRost1", 1.4);
AddColumn(perRost2 , "perRost2", 1.4);


Теперь надо получить открытие вчерашнего последнего бара на минутке.
Какой есть простой способ это осуществить?
Заранее спасибо!
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen