Укажите пожалуйста на ошибки

  • Автор темы Andrei72
  • Дата начала

Andrei72

New member
Пробую в AmiBroker код для фьючерса РТС таймфрейм 60 минут ,сайз постоянный 3 контракта,депо 230000 тр.Если кому не трудно проверте пожалуйста и укажите на ошибки.Заранее спасибо за помощь.Вот код:
SetPositionSize(3,4);//Кол-во контрактов
Cond1=Cross(C,MA(C,64));//Цена пересекает МА снизу вверх
Cond2=Cross(MA(C,64),C);//Цена пересекает МА сверху вниз
SetTradeDelays(1,1,1,1);//Вход на следующем(1) баре после сигнала
BuyPrice=O+200;ShortPrice=O-200;CoverPrice=0;SellPrice=0;//Цена покупки,продажи открытие бара +- 200 пунктов
//Условия покупки продажи
Buy=Cover=Cond1;//Условия покупки
Short=Sell=Cond2; //Условие короткой продажи
//Условия выхода по стопу и профиту
ApplyStop(0,2,640,1,False,0);//Описание условий стопа
ApplyStop(1,2,13200,1,False,0);//Описание условий профита
Equity(1);
if( Status("action") != 5 ) e = Equity( 2 );
//Условия отрисовки сигналов покупки и продажи и звуковых сигналов
PlotShapes(IIf (Buy, shapeUpArrow, shapeNone), 10, 0, L, Offset=-50);//Отрисовка сигнала покупки
PlotShapes(IIf(Short, shapeDownArrow, shapeNone), 11, 0, H, Offset=-50);//Отрисовка сигнала короткой продажи
PlotShapes(IIf(Sell==2, shapeSmallSquare, shapeNone), 10, 0, L, Offset=0);//Отрисовка стоплосса после сигнала Buy
PlotShapes(IIf(Sell==3, shapeSmallDownTriangle, shapeNone), 10, 0, H, Offset=0);//Отрисовка профита после сигнала Buy
PlotShapes(IIf(Cover==2, shapeSmallSquare, shapeNone), 11, 0, H, Offset=0);//Отрисовка стоплосса после сигнала Short
PlotShapes(IIf(Cover==3, shapeSmallUpTriangle, shapeNone), 11, 0, L, Offset=0);//Отрисовка профита после сигнала Short
AlertIf( Buy, "SOUND C:\\Windows\\Media\\malfound.wav", "Audio alert", 3 );//Звуковой сигнал
AlertIf( Short, "SOUND C:\\Windows\\Media\\malfound.wav", "Audio alert", 3 );//Звуковой сигнал
//Отрисовка графика цены в барах
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
col = IIf( Close > Ref( Close, -1 ), colorGreen, colorRed );
Plot( Close, "Price", col, styleBar| styleThick );Graph0BarColor = IIf( MA(C,64) < Close , 5,4 );
//Отрисовка МА
P = ParamField("Price field",-1);
Periods = Param("Periods", 64, 1, 100, 1, 10 );
Plot( MA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorSkyblue ), ParamStyle("Style",styleThick,styleDashed) );
_SECTION_END();
// Отрисовка названия сделки и цены закрытия бара
for( i = 0; i < BarCount; i++ )
{

if( Buy==1 ) PlotText("LONG"+ "\n " +O , i, L/1.035, 10 );
if( Short==1 ) PlotText("SHORT"+ "\n " + O[ i ], i, H[ i ]*1.035, 11 );

}
 

Commenced

New member
Если хочеш знать что было последним и цену сделки используй флип для фильтрации сигнала после чего выводи как текст, цикл для этого не нужен. Проверяй код чтобы вместо О у тебя не стоял 0, как счас в селпрайс и соверпрайс. Убери ограничение по кол-ву контрактов, в год разница между прошлым и сегодняшним фьючем 50%, проще в таком случает тестить на фиксированных бабках.

На вскидку как то так. А вообще все вопросы поднимались. Обратись на специализированный форум, многие коды там выложены, плюс есть хелп на русском и пример тестирования систем http://www.amisite.ru/phpBB2/index.php

Код:
SetPositionSize(3,4);//Кол-во контрактов 

f = Optimize("f",200,50,1000,10);
Buy=Ref(Cross(C,MA(C,64)),-1) AND H>=O+f;//Цена пересекает МА снизу вверх 
Short=Ref(Cross(MA(C,64),C),-1) AND L<=O-f;//Цена пересекает МА сверху вниз 
Cover=Ref(Cross(C,MA(C,64)),-1);//Цена пересекает МА снизу вверх 
Sell=Ref(Cross(MA(C,64),C),-1);//Цена пересекает МА сверху вниз 



BuyPrice=O+f;ShortPrice=O-f;CoverPrice=O;SellPrice=O;//Цена покупки,продажи открытие бара +- 200 пунктов 

ApplyStop(0,2,640,1,False,0);//Описание условий стопа 
ApplyStop(1,2,13200,1,False,0);//Описание условий профита 
Equity(1); 

PlotShapes(IIf(Buy,shapeUpArrow,0),7,0,L,-25); 
PlotShapes(IIf(Sell,shapeDownArrow,0),3,0,H,-25); 
PlotShapes(IIf(Cover,shapeHollowUpArrow,0),7,0,L,-25); 
PlotShapes(IIf(Short,shapeHollowDownArrow,0),3,0,H,-25); 
AlertIf( Buy, "SOUND C:\\Windows\\Media\\malfound.wav", "Audio alert", 3 );//Звуковой сигнал 
AlertIf( Short, "SOUND C:\\Windows\\Media\\malfound.wav", "Audio alert", 3 );//Звуковой сигнал 
//Отрисовка графика цены в барах 
SetChartOptions(0,chartShowArrows|chartShowDates); 
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )); 
col = IIf( Close > Ref( Close, -1 ), colorGreen, colorRed ); 
Plot( Close, "Price", col, styleBar| styleThick );Graph0BarColor = IIf( MA(C,64) < Close , 5,4 ); 
//Отрисовка МА 
P = ParamField("Price field",-1); 
Periods = Param("Periods", 64, 1, 100, 1, 10 ); 
Plot( MA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorSkyblue ), ParamStyle("Style",styleThick,styleDashed) ); 
_SECTION_END();
 

Andrei72

New member
Спасибо большое за ответ и разбор.SellPrice=CoverPrice=0; потому что они же исполняются по ценам стопа и профита внутри бара,а если ставить О ,то привязка будет к ценам открытия бара,вроде так ?С колвом контрактов можно так SetPositionSize(8,2)?; Над остальным подумаю,потом если можно спрошу еще.Еще раз спасибо за ответ.
 

Commenced

New member
Спасибо большое за ответ и разбор.SellPrice=CoverPrice=0; потому что они же исполняются по ценам стопа и профита внутри бара,а если ставить О ,то привязка будет к ценам открытия бара,вроде так ?С колвом контрактов можно так SetPositionSize(8,2)?; Над остальным подумаю,потом если можно спрошу еще.Еще раз спасибо за ответ.
Да нет исполнение у тебя в основном по условию, а не стопу, хотя может смотрел на другом тайме просто, но неважно. если ты хочеш выход прицепить полностью к стопам то sell=cover=0;
 

Andrei72

New member
Спасибо ,да немного перепутал там выход и по пересечению и по стопам. Немного непонятен момент Buy=Ref(Cross(C,MA(C,64)),-1)AND H>O+f-Бай если было пересечение ценой МА на предидущем баре и( Н > O+f)вот это уже непонятно Н и О какого бара .Я делал BuyPrice=O+200;ShortPrice=O-200 это наихудшая цена по которой могу воти от открытия бара.Чтобы попасть в цену открытия бара можно входить за несколько секунд до открытия ,уже будет ясно что пересечение ценой МА истинным в хх:59:55 часов правильно?
 

Commenced

New member
Спасибо ,да немного перепутал там выход и по пересечению и по стопам. Немного непонятен момент Buy=Ref(Cross(C,MA(C,64)),-1)AND H>O+f-Бай если было пересечение ценой МА на предидущем баре и( Н > O+f)вот это уже непонятно Н и О какого бара .Я делал BuyPrice=O+200;ShortPrice=O-200 это наихудшая цена по которой могу воти от открытия бара.Чтобы попасть в цену открытия бара можно входить за несколько секунд до открытия ,уже будет ясно что пересечение ценой МА истинным в хх:59:55 часов правильно?
Все делается именно так как ты планировал, у тебя стояла функция которая позволяла входить на следующем баре, у меня это реф, а т.к. цена входа у тебя была o+200, то я и добавил условие H>O+f, f вбил специально, чтоб ты мог отступ оптимизировать.
 

Andrei72

New member
Все делается именно так как ты планировал, у тебя стояла функция которая позволяла входить на следующем баре, у меня это реф, а т.к. цена входа у тебя была o+200, то я и добавил условие H>O+f, f вбил специально, чтоб ты мог отступ оптимизировать.
Спасибо большое все понял.
 
Ты про это

Buy = LastValue(Buy);
Sell = LastValue(Sell);
Short = LastValue(Short);
Cover = LastValue(Cover);
это понятно...
только если у меня условие по пересечению уровня ценой, то мне нужно совершать сделку по цене пересечения.
а если потом цена закрытия уходит обратно под уровень, то сделка отменяется.

а мне не нужно чтобы она отменялась!
мне нужно, чтобы если цена пересекла уровень, то сделка считается совершенной пока по стопу не выбьет.
и неважно, что она уйдет вновь ниже уровня.

причем, к сожалению, использовать H и L вместо цены закрытия я тут не могу.
и вот почему:
меня интересует "ложный пробой", т.е. L должен уйти ниже уровня, а, затем, C вернутся выше. и в момент обратного пересечения уровня я совершаю сделку.
т.е. мы имеем ситуацию, когда H выше уровня (т.к. изначально так было), L ниже уровня, и все зависит от C.
так вот! тестер, если цена закрывается ниже уровня ОТМЕНЯЕТ задним числом сигнал на этом баре текущем. не учитывает этот сигнал.
а мне нужно чтоб учитывал.

вот бьюсь с этой ерундой уже третий день. пщщщ
 

Commenced

New member
меня интересует "ложный пробой", т.е. L должен уйти ниже уровня, а, затем, C вернутся выше. и в момент обратного пересечения уровня я совершаю сделку.
И где гарантия что с не уйдет в обратку.
2 варианта. 1 если торгуеш часовик переходиш на нижний тайм к примеру 5 мин, заводиш уровень с часовика и если пробой состоялся то отслеживаеш следующие свечи до истечения часовика. 2. вариант вход на следующем баре. Других стабильных входов не существует.
 

000

New member
причем, к сожалению, использовать H и L вместо цены закрытия я тут не могу.
и вот почему:
меня интересует "ложный пробой", т.е. L должен уйти ниже уровня, а, затем, C вернутся выше. и в момент обратного пересечения уровня я совершаю сделку.
т.е. мы имеем ситуацию, когда H выше уровня (т.к. изначально так было), L ниже уровня, и все зависит от C.
так вот! тестер, если цена закрывается ниже уровня ОТМЕНЯЕТ задним числом сигнал на этом баре текущем. не учитывает этот сигнал.
а мне нужно чтоб учитывал.

вот бьюсь с этой ерундой уже третий день. пщщщ
Угу. А после второго пробоя цена опять ушла ниже, а потом опять пробила и опять надо покупать....
А кроме того по закрытому бару никак нельзя сказать сколько раз цена внутри бара пробивала уровень (был ли там второй/третий... пробой)
3 варианта. Либо по H L, Либо по закрытию но в конце бара (в начале следующего) либо переходить на меньший фрейм.
 
а мне не нужно подсчитывать количество пробоев.
я просто хочу, чтобы если он состоялся хоть один раз - а это ясно во время он-лайн котировок, чтобы тут же этот результат фиксировал до конца бара, и не важно как бар закроется (ну только за исключением если стопы выбьет).

пока повторный вход я не учитываю на том же баре - это уже другая проблема, и она попроще первой.
 
хорошо,
а как реализовать переход на меньший фрейм?
из примеров, что я видел на http://amisite.ru/phpBB2/index.php
там был переход на больший фрейм и обратно.

т.е. изначально система должна быть на меньшем фрейме запущена, потом переход на больший, а затем опять на меньший?
очень смутно представляю себе механизм, как Амиброкер это все обрабатывает.
 
Разве проблема больший тайм замутить..........арифметическое действие умножение..........
не просто умножение!
проблема вот в чем.
если просто умножать, то сигнал будет "съезжать"

например:

сигнал на минутках 15 баров назад не идентичен 3 барам на пятиминутках

т.к., если считать от текущего первого минутного бара на пятиминутках Ref(C, -3) идентичен минутным Ref(C, -11).
а не -15.

на втором минутном баре это будет Ref(C, -12), на третьем Ref(C, -13), на четвертом Ref(C, -14) и только на пятом они сравняются Ref(C, -15).
на шестом баре - вновь Ref(C, -11).

вот картинка:
 

Commenced

New member
На сайте Олега должен быть пример, причем сам я писал код на подобную тему, т.е. отслеживание пробоя с нижнего тайма, если используеш функции компресии ничего не съезжает.
 
почитал про TimeFrameSet и TimeFrameCompress,
походу мне TimeFrameCompress больше подходит.

вопрос, правда, опять в интерпретации Амиброкером.
вот я нахожусь на текущем минутном баре
и пишу:
// базовый фрейм минутки
time5m = TimeFrameCompress( High, in5Minute);// заношу в массив цены хаев на 5минутках
Last3High = HHV(time5m, 3); // определяю наивысший хай на массиве пятиминуток
Last3High = TimeFrameExpand(Last3High, in5Minute); // разжимаю

/*
внимание, вопрос:
эти 5минутные бары считаются как?
начиная с предыдущего минутного бара?
или начиная с конца последней 5минутки? но тогда где начало - с начала всех баров?
вот этот момент вообще не ясен.
 

Commenced

New member
почитал про TimeFrameSet и TimeFrameCompress,
походу мне TimeFrameCompress больше подходит.

вопрос, правда, опять в интерпретации Амиброкером.
вот я нахожусь на текущем минутном баре
и пишу:
// базовый фрейм минутки
time5m = TimeFrameCompress( High, in5Minute);// заношу в массив цены хаев на 5минутках
Last3High = HHV(time5m, 3); // определяю наивысший хай на массиве пятиминуток
Last3High = TimeFrameExpand(Last3High, in5Minute); // разжимаю

/*
внимание, вопрос:
эти 5минутные бары считаются как?
начиная с предыдущего минутного бара?
или начиная с конца последней 5минутки? но тогда где начало - с начала всех баров?
вот этот момент вообще не ясен.
Вобщем тебе нужно получить готовую линию, а потом разжимать. Сейчас он будет искать высший h за последние 3 бара минуток, а ты хочеш чтоб он искал за последнии 3 бара 5 мин.

СИНТАКСИС TimeFrameSet( interval)
ВОЗВРАЩАЕТ НИЧЕГО
ФУНКЦИЯ Фунуция TimeFrameSet заменяет массивы цен/объемов: open(открытие), high(миксимум), low(минимум), close(закрытие), volume(объем), openint(открытый интерес), avg(средняя цена) на старший временной интервал interval. Как только произошло переключение на определенный интервал все вычисления и индикаторы начинают оперировать с выбраным временным интервалом. Для возвращения на базовый интервал вызовите функцию TimeFrameRestore(). Прежде чем вызвать функцию TimeFrameSet повторно с другим заданным интервалом Вы должны восстановить оригинальный фрейм используя функцию TimeFrameRestore.
 
Your email address will not be publicly visible. We will only use it to contact you to confirm your post.
Сверху