Автор |
Сообщение |
rupiter
Зарегистрирован: 16.09.2013
Сообщения: 75
|
Написал следующую стратегию. Система отслеживает SwingHigh, SwingLow (такой формулы в AFL нет, но есть в EL, а по сути "фрактал Вильямса"). Как только на графике находится очередной SwingHigh, его характеристики записываются в массив (всего в массиве содержаться данные о 10 последних SwingHigh).
После этого (на этом же баре) система просматривает предыдущие SwingHigh массиве, пока не обнаружит первый попавшийся с High выше текущего. По ним строится нисходящая трендовая линия (старая линия, если была, удаляется).
Далее, при прорыве ценой этой линии происходит покупка. Выход по трейлинг стопу. Построение восходящей линии, а также входы в шорт производятся аналогичным способом.
Что обнаружил странного. Если я в самом коде системы помечаю входы и выходы стрелками, то они отображаются на графике нормально. Если же пытаюсь отобразить сделки из тестера, то, во-первых, на графике отображаются не все сделки, а только несколько последних, а также, при перерисовывании трендовой линии, стрелки старых сделок сдвигаются от графика к самой линии. |
Последний раз редактировалось: rupiter (Чт Июн 30, 2016 6:20 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
rupiter
Зарегистрирован: 16.09.2013
Сообщения: 75
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм.Странно. А цены сделок в тестере правильные? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
rupiter
Зарегистрирован: 16.09.2013
Сообщения: 75
|
Система (на графике были отображены только длинные сделки, в системе же предусмотрены входы в обе стороны):
Код: |
#include <SwingHighBar.afl>
#include <SwingLowBar.afl>
SetTradeDelays( 1, 0, 1, 0 );
SetPositionSize( RoundLotSize, spsShares );
RHStren = Param("RHStren", 4, 1, 10);
RLStren = Param("RLStren", 4, 1, 10);
Trailbar = Param("Trailbar", 6, 1, 50);
RHArray = Matrix( 2, 10, 0 );
RHTLRef = Null;
RLArray = Matrix( 2, 10, 0 );
RLTLRef = Null;
Buy = 0;
BuyPrice = Open;
Sell = 0;
Short = 0;
ShortPrice = Open;
Cover = 0;
SwingHigh = SwingHighBar( RHStren );
SwingLow = SwingLowBar( RLStren );
for( i = RHStren * 2; i < BarCount; i++ )
{
newHighLineToDraw = False;
//Adding new SwingHigh into array
if( SwingHigh[i] )
{
for( value1 = 0; value1 < 9; value1++ )
{
RHArray[0][9 - value1] = RHArray[0][8 - value1];
RHArray[1][9 - value1] = RHArray[1][8 - value1];
}
RHArray[0][0] = High[i - RHStren];
RHArray[1][0] = i - RHStren;
}
//Checking if the last SwingHigh is lower than previous ones
for( value22 = 1; value22 < 10; value22++ )
{
if( RHArray[0][value22] > RHArray[0][0] )
{
newHighLineToDraw = True;
RHArrayVal = value22;
break;
}
}
//Drawing the line
if( newHighLineToDraw )
{
RHTLRef = -1;//оно надо?
RHTLRef = LineArray( RHArray[1][RHArrayVal], RHArray[0][RHArrayVal], RHArray[1][0], RHArray[0][0], 1 , False );
}
//Placing long orders
if( Close[i - 1] <= RHTLRef[i] AND Close[i] > RHTLRef[i] )
{
Buy[i] = 1;
}
}
for( i = RLStren * 2; i < BarCount; i++ )
{
newLowLineToDraw = False;
//Adding new SwingHigh into array
if( SwingLow[i] )
{
for( value1 = 0; value1 < 9; value1++ )
{
RLArray[0][9 - value1] = RLArray[0][8 - value1];
RLArray[1][9 - value1] = RLArray[1][8 - value1];
}
RLArray[0][0] = Low[i - RLStren];
RLArray[1][0] = i - RLStren;
}
//Checking if the last SwingLow is higher than previous ones
for( value22 = 1; value22 < 10; value22++ )
{
if( RLArray[0][value22] < RLArray[0][0] )
{
newLowLineToDraw = True;
RLArrayVal = value22;
break;
}
}
//Drawing the line
if( newLowLineToDraw )
{
RLTLRef = -1; //оно надо?
RLTLRef = LineArray( RLArray[1][RLArrayVal], RLArray[0][RLArrayVal], RLArray[1][0], RLArray[0][0], 1 , False );
}
//Placing short orders
if( Close[i - 1] >= RLTLRef[i] AND Close[i] < RLTLRef[i] )
{
Short[i] = 1;
}
}
// Placing trailing protective stop orders
Sell = Cross( Ref( LLV( Low, TrailBar ), -1 ), Low );
SellPrice = Min( Open, Ref( LLV( Low, TrailBar ), -1 ) );
Cover = Cross( High, Ref( HHV( High, TrailBar ), -1 ) );
CoverPrice = Max( Open, Ref( HHV( High, TrailBar ), -1 ) );
buy = ExRem( buy, sell );
sell = ExRem( sell, buy );
Cover = ExRem(Cover, Short);
Short = ExRem(Short, Cover);
Plot( RHTLRef, "Trend line down", colorBlue );
Plot( RLTLRef, "Trend line Up", colorRed );
Plot( C, "C", colorWhite, styleBar );
Plot( Ref( LLV( Low, TrailBar ), -1 ), "LongTrail", colorGrey50, styleDashed );
Plot( Ref( HHV( High, TrailBar ), -1 ), "ShortTrail", colorRed, styleDashed );
buyShape = Buy * shapeUpArrow + Sell * shapeDownArrow ;
PlotShapes( buyShape, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, Low, High ) );
shortShape = Cover * shapeHollowUpArrow + Short * shapeHollowDownArrow ;
PlotShapes( shortShape, IIf( Cover, colorGreen, colorRed ), 0, IIf( Cover, Low, High ) ); |
Функция SwingHigh
Код: |
function SwingHighBar( bars )
{
for( i = bars * 2; i < BarCount; i++ )
{
countBefore = 0;
countAfter = 0;
for( j = i - bars * 2; j < i - bars; j++ )
{
countBefore += High[j] <= High[i - bars];
}
for( j = i - bars + 1; j <= i; j++ )
{
countAfter += High[j] < High[i - bars];
}
if( countBefore + countAfter == bars * 2 )
{
result[i] = 1;
}
else
{
result[i] = 0;
}
}
return result;
} |
Функция SwingLow
Код: |
function SwingLowBar( bars )
{
for( i = bars * 2; i < BarCount; i++ )
{
countBefore = 0;
countAfter = 0;
for( j = i - bars * 2; j < i - bars; j++ )
{
countBefore += Low[j] >= Low[i - bars];
}
for( j = i - bars + 1; j <= i; j++ )
{
countAfter += Low[j] > Low[i - bars];
}
if( countBefore + countAfter == bars * 2 )
{
result[i] = 1;
}
else
{
result[i] = 0;
}
}
return result;
} |
|
Последний раз редактировалось: rupiter (Ср Июн 29, 2016 12:17 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
rupiter
Зарегистрирован: 16.09.2013
Сообщения: 75
|
000 писал(а): |
Хм.Странно. А цены сделок в тестере правильные? |
Те, что проверил, были правильные. Ну, то есть, с учетом того, что у меня предусмотрен вход на открытии следующего дня, стрелки из тестера будут сдвинуты на один бар относительно стрелок из кода (которые прорисовываются в момент, когда Buy==1). А в остальном (вроде) все нормально.
И, еще. Когда я скролю график (и, соответственно, линии перерисовываются так, что у правого края графика остаются только две последние - одна восходящая, одна нисходящая), стрелки входов также динамически проявляются / исчезают (исчезают прошлые, появляются новые). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
rupiter писал(а): |
И, еще. Когда я скролю график (и, соответственно, линии перерисовываются так, что у правого края графика остаются только две последние - одна восходящая, одна нисходящая), стрелки входов также динамически проявляются / исчезают (исчезают прошлые, появляются новые). |
Проявляются/исчезают когда стрелки из тестера или нарисованные в коде? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
rupiter
Зарегистрирован: 16.09.2013
Сообщения: 75
|
Проявляются/исчезают стрелки из тестера. Стрелки из кода отображаются нормально и не меняют своего положения при скроллинге. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|