Автор |
Сообщение |
ujif
Зарегистрирован: 09.02.2012
Сообщения: 174
|
как получить цену покупки после усреднения?
вот код, который усредняет, взят с сайта в теме по усреднению.
Вопрос если доливка идет n раз и мы не знаем сколько будет доливок, где брать среднюю цену?
Buy =C<O&&Volume>500; // правила первоначального входа в позицию.
Short = C>O&&Volume>500; // правила выхода
priceatbuy = 0;
position = 0;
for( i = 0; i < BarCount; i++ )
{
if(position == 0)
{
if(Buy[i])
{
Buy[i] = 1;
position = 1;
priceatbuy = C[i];
}
}
else if(position == 1)
{
if(H[i]>priceatbuy+0.002)
{
Sell[i] = 1;
position = 0;
priceatbuy=0;
}
else if(C[i] <= priceatbuy - 0.05) // докупка
{
Buy[i] = sigScaleIn;
priceatbuy = ?????
}
}
} |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ее надо считать после каждой доливки.
(цена доливки - цена входа)*размер позиции до доливки = текущая прибыль позиции.
новая цена входа = цена доливки - текущая прибыль/новый размер позиции |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ujif
Зарегистрирован: 09.02.2012
Сообщения: 174
|
Олег, что-то как-то сложно очень, мне надо среднуюю цену доливки посчитать чтобы к ней прибавить профитный выход по стопу. А будет работать апплай стоп, если используешь усреднения корректно? Он стоп то будет считать к средней цене или к первой? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вроде бы должен. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ujif
Зарегистрирован: 09.02.2012
Сообщения: 174
|
Почему когда добавляю setpositionsize(1,4) он торгует в тестере одним контрактом и не добавляет к позиции когда докупает, хотя на графиках докупает регулярно??? как сделать простую систему чтобы она усреднялась на падении и показывала что докупает контракты? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я совсем недавно про это писал.
В тестере доливки не показываются.
Простой пример.
Понедельник покупка 1 лот по 5руб
Вторник доливка 1 лот по 7руб
Среда - выход.
В отчете тестер покажет одну сделку открытую в понедельник 2 лота по цене 6 руб. и закрытую в среду. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
кстати о доливках. как раз ковыряюсь с ними.
чтоб увидеть доливки в подробностях, а не позиции по средним ценам, нужно в настройках тестера в Report переключить на Detailed log.
или в коде просто добавить:
Код: |
SetOption( "PortfolioReportMode", 1 );
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
ujif
Зарегистрирован: 09.02.2012
Сообщения: 174
|
Вот простой код, но он не делает то как ты говоришь. Усредняет возможно, не уверен, но точно не ведет позицию на реальное количество лотов. Тупо торгует одним лотом. Где косяк?
Buy1 =C<O&&Volume>500; // правила первоначального входа в позицию.
priceatBuy = 0;
position = 0;
for( i = 0; i < BarCount; i++ )
{
if(position == 0)
{
if(Buy1[i])
{Buy[i]=1;
position = 1;
priceatbuy = C[i];
}
}
else if(position == 1)
{
if(H[i]>priceatbuy+0.002)
{
Sell[i] = 1;
position = 0;
priceatbuy=0;
}
else if(C[i] <= priceatbuy - 0.05) // докупка
{
Buy[i] = sigScaleIn;
priceatbuy = C[i];
}
}
}
PlotShapes(IIf(Buy,shapeUpArrow,0),colorGreen,0,Graph0,-12);
PlotShapes(IIf(Sell,shapeDownArrow,0),colorViolet,0,Graph0,-12);
PlotShapes( IIf( Buy, shapeSmallCircle, shapeNone ), colorBrightGreen, 0, BuyPrice, 0 );
PlotShapes( IIf( Sell, shapeSmallCircle, shapeNone ), colorViolet, 0 , SellPrice, 0 );
SetPositionSize(1,4); |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
Buy1 = C < O AND Volume > 500; // правила первоначального входа в позицию.
priceatBuy = 0;
position = 0;
Buy = Sell = Short = Cover = 0;
for( i = 0; i < BarCount; i++ )
{
if(position == 0)
{
if(Buy1[i])
{
Buy[i]=1;
position = 1;
priceatbuy = C[i];
}
}
else if(position == 1)
{
if(H[i] > priceatbuy + 0.002)
{
Sell[i] = 1;
position = 0;
priceatbuy = 0;
}
else if(C[i] <= priceatbuy - 0.05) // ???????
{
Buy[i] = sigScaleIn;
priceatbuy = C[i];
}
}
}
PlotShapes(IIf(Buy == 1, shapeUpArrow, shapeNone), colorGreen, 0, L, -12);
PlotShapes(IIf(Sell, shapeDownArrow, 0), colorViolet,0, H, -12);
PlotShapes( IIf( Buy == sigScaleIn, shapeSmallCircle, shapeNone), colorBrightGreen, 0, L, 0 );
//PlotShapes( IIf( Sell, shapeSmallCircle, shapeNone ), colorViolet, 0 , SellPrice, 0 );
Plot(C, "", colorBlack, styleCandle);
SetPositionSize(1, 4); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZVV
Зарегистрирован: 20.11.2014
Сообщения: 69
|
000 писал(а): |
Я совсем недавно про это писал.
В тестере доливки не показываются.
Простой пример.
Понедельник покупка 1 лот по 5руб
Вторник доливка 1 лот по 7руб
Среда - выход.
В отчете тестер покажет одну сделку открытую в понедельник 2 лота по цене 6 руб. и закрытую в среду. |
Доброго времени...!
Ничего не изменилось с этим вопросом? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Привет.
В Ами уже давно есть Porfolio Backtester Interface
Это (с точки зрения кодирования) довольно замороченная технология, но она позволяет максимально точно управлять позициями в портфеле.
Там есть такое понятие как Trade object, а у него есть свойство EntryPrice.
Это как раз цена открытия позиции.
Цитата: |
entry price, if any scaling-in occurred this holds average entry price |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZVV
Зарегистрирован: 20.11.2014
Сообщения: 69
|
А нет в недрах форума (или может встречался на поверхности просторов инета) простого, вот совсем простого, готового шаблона цикла, добавляющего, убавляющего позицию, просто по срабатыванию на баре Buysignal или Sellsignal? Т.е. чтобы просто (как современный лисапед) - есть сигнал - купил, на след баре есть сигнал - купил/продал, нет сигнала - ничего не делает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А зачем для этого цикл? Просто в хелпере Ами есть простые примеры. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ZVV
Зарегистрирован: 20.11.2014
Сообщения: 69
|
Цитата: |
Starting from version 4.70 portfolio backtester allows position scaling and supports multiple currencies. Note that these advanced features are supported by PORTFOLIO backtester only. Old single-security backtester and single-security equity() function do NOT support these features.
Pyramiding / Scaling
Two special constants: sigScaleIn / sigScaleOut added to provide means to tell the backtester when you want to scale-in/out |
Это оно? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Pyramiding (scaling in/out) and mutliple currencies in the portfolio backtester |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|