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



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

СообщениеДобавлено: Ср Июн 29, 2016 11:43 am Ответить с цитатой Вернуться к началу

Написал следующую стратегию. Система отслеживает SwingHigh, SwingLow (такой формулы в AFL нет, но есть в EL, а по сути "фрактал Вильямса"). Как только на графике находится очередной SwingHigh, его характеристики записываются в массив (всего в массиве содержаться данные о 10 последних SwingHigh).

После этого (на этом же баре) система просматривает предыдущие SwingHigh массиве, пока не обнаружит первый попавшийся с High выше текущего. По ним строится нисходящая трендовая линия (старая линия, если была, удаляется).

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

Что обнаружил странного. Если я в самом коде системы помечаю входы и выходы стрелками, то они отображаются на графике нормально. Если же пытаюсь отобразить сделки из тестера, то, во-первых, на графике отображаются не все сделки, а только несколько последних, а также, при перерисовывании трендовой линии, стрелки старых сделок сдвигаются от графика к самой линии.


Последний раз редактировалось: rupiter (Чт Июн 30, 2016 6:20 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
rupiter



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

СообщениеДобавлено: Ср Июн 29, 2016 11:45 am Ответить с цитатой Вернуться к началу

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


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

СообщениеДобавлено: Ср Июн 29, 2016 11:52 am Ответить с цитатой Вернуться к началу

Хм.Странно. А цены сделок в тестере правильные?

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



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

СообщениеДобавлено: Ср Июн 29, 2016 11:53 am Ответить с цитатой Вернуться к началу

Система (на графике были отображены только длинные сделки, в системе же предусмотрены входы в обе стороны):
Код:

#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

СообщениеДобавлено: Ср Июн 29, 2016 11:54 am Ответить с цитатой Вернуться к началу

000 писал(а):
Хм.Странно. А цены сделок в тестере правильные?

Те, что проверил, были правильные. Ну, то есть, с учетом того, что у меня предусмотрен вход на открытии следующего дня, стрелки из тестера будут сдвинуты на один бар относительно стрелок из кода (которые прорисовываются в момент, когда Buy==1). А в остальном (вроде) все нормально.

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


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

СообщениеДобавлено: Ср Июн 29, 2016 1:04 pm Ответить с цитатой Вернуться к началу

rupiter писал(а):

И, еще. Когда я скролю график (и, соответственно, линии перерисовываются так, что у правого края графика остаются только две последние - одна восходящая, одна нисходящая), стрелки входов также динамически проявляются / исчезают (исчезают прошлые, появляются новые).

Проявляются/исчезают когда стрелки из тестера или нарисованные в коде?

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



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

СообщениеДобавлено: Чт Июн 30, 2016 6:15 am Ответить с цитатой Вернуться к началу

Проявляются/исчезают стрелки из тестера. Стрелки из кода отображаются нормально и не меняют своего положения при скроллинге.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen