Автор |
Сообщение |
tvilsa
Гость
|
Начал изучать ами.
По учебнику сделал МТС с пересечением средней и цены.
Хотелось бы расширить возможности системы и потому вопрос:
Как определить цену сделки при выполнении условия покупки.
Т.е. стоит
Buy=......
Как мне в программе узнать по какой цене произошла покупка.
Заранее спасибо. |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цена покупки определяется массивом Buyprice. Соответственно цена закрітия покупки SellPrice, цена короткой продажи Shortprice и цена закрітия короткой продажи.
Следует иметь ввиду, что в общем случае цена сделки должна входить в диаппазон бара на котором произошла сделка т.е. біть не ниже минимума и не віше максимума. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
tvilsa
Гость
|
Видимо я не правильно спросил
BuyPrice я так понял лимитирует цену сделки а мне надо
определить по какой конкретно цене выполнилась операция Buy.
Я хочу добавить к стратегии
Ps = Optimize("P_slow", 13, 10, 20, 1);
Pf = Optimize("P_fast", 2, 2, 9, 1);
Buy = Cross(EMA(C,Pf ), EMA(C,Ps ));
/* покупка когда быстрая МА пересекает медленную МА снизу вверх и средняя цена за последний бар больше средней цены за предпоследний бар*/
Sell = Cross(EMA(C,Ps ),EMA(C,Pf ));
/* продажа когда быстрая МА пересекает медленную МА сверху вниз */
что бы продавалось также не только при пересечении средних на и при превышении текущей ценой цены покупки на величину ххх. для фиксации прибыли.
Попробывал так
a=Buy+0.1; /* а равно цена окупки +0.1 */
Sell = Cross(EMA(C,Ps ),EMA(C,Pf )) OR Close[ BarCount - 1 ] > a;
не получается. по отчету после покупки сразу продажа. Почему?
Чейто закралось подозрение пока писал что Buy хранит величину ввсей сделки тобишь цена на кол-во?
Как мне учесть при продаже изменение цены относительно окупки?
Заранее спасибо. |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Прочитай про функцию ApplyStop() Она может делать подобные вещи. Будут вопросы - спрашивай. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
tvilsa
Гость
|
Попробывал так
////////// Правила системы ///////////////
Buy = Cross(EMA(C,2 ), EMA(C,13 ));
/* покупка когда быстрая МА пересекает медленную МА снизу вверх и средняя цена за последний бар больше средней цены за предпоследний бар*/
Sell = 0;
ApplyStop( stopTypeProfit, stopModePercent, 1.05,2, False ,0 ); /* типа снять профит 1.05 процента*/
Short=0;
Cover=0;
///////////// Рисуем всякое ///////////////
Plot(C,"price",1,128);
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell,shapeDownArrow,0),4,0,Graph0,-15);
на графиках только точки входа, а выхода нет.
а вот так работает
priceatbuy=0;
for( i = 0; i <BarCount> 0 && SellPrice[ i ] > 1.01 * priceatbuy )
{
Sell[ i ] = 1;
SellPrice[ i ] = 1.01 * priceatbuy;
priceatbuy = 0;
}
else
Sell[ i ] = 0;
}
в чем дело?
Заранее благодарен |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Для того чтобы ApplyStop() сработала в индикаторе необходимо в код добавить функцию Equity(). Почитай про неё в хелпере, там есть коментарий Томаша, что при срабатывании стопов в массив сделок (Buy, sell) будет записана не 1. Соответственно и PlotShapes() можно сделать подругому. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
tvilsa
Гость
|
Есть еще один трабл.
Делаю МТС из Ами и квика
вопрос такой.
Если условие покупки наступает несколько раз без наступления условия продажи то ами делает две покупки.
Как ограничить систему что если один раз купила то больше не покупать пока не продаст предыдущие. |
|
|
|
|
tvilsa
Гость
|
сделал вот так
Sell = 0;
ApplyStop( stopTypeProfit, stopModePercent, 1.01,2, False ,0 ); /* типа снять профит 1.01 процента*/
Short=0;
Cover=0;
////// Убираем лишние сигналы /////////////
Buy=ExRem(Buy,Sell);
Sell=ExRem(Sell,Buy);
Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short);
///////////// Рисуем всякое ///////////////
Plot(C,"price",1,128);
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
Equity(1); // THIS EVALUATES STOPS
Plot(Sell==4,"ApplyStop Sell",colorRed,1|styleOwnScale);
как небыло точек продажи так и нет
строка Plot(Sell==4,"ApplyStop Sell",colorRed,1|styleOwnScale);
добавляет линию на уровне 0
Не могли бы Вы написать как добавить на график точки продажи по исполненым стопам?
И правильно ли я записываю
ApplyStop( stopTypeProfit, stopModePercent, 1.01,2, False ,0 );
для выставления тайк профита на величину 1% от сделки?
Можно ли одновременно выставить условия продажи по стоп лосс и тай профит? |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Интересно, а почему в коде Sell = 4. При взятии профита sell будет равен 3.
Далее кусок кода
Код: |
Buy=ExRem(Buy,Sell);
Sell=ExRem(Sell,Buy);
Short=ExRem(Short,Cover);
Cover=ExRem(Cover,Short);
|
Он удаляет "лишние" сигналы. Но у Вас написано Sell = 0;, а стопы еще не работают, поэтому сигналов sell нет и оответственно сработает только первый сигнал Buy.
И еще нюансик. у Вас
Код: |
ApplyStop( stopTypeProfit, stopModePercent, 1.01, 2, False ,0 );
|
если ExitAtStop = 2, то это не стоп ордер (моментальное исполнение), а исполнение по обычному алгоритму в случае если была ситуация на остановку. Не знаю понятно ли написал...
Цитата: |
Можно ли одновременно выставить условия продажи по стоп лосс и тай профит?
|
Можно писать сколько надо ApplyStop в которых перечислить все необходимые остановки.
В общем надо примерно так.
Код: |
MA1 = MA(C, 10);
MA2 = MA(C, 30);
Buy = Cross(MA1, MA2);
Sell = 0;
ApplyStop( stopTypeProfit, stopModePercent, 1.01, 2, False ,0 ); /* типа снять профит 1.01 процента*/
ApplyStop( stopTypeLoss, stopModePercent, 1.01, 2, False ,0 ); /* типа стоп 1,01 процента */
Short=0;
Cover=0;
Equity(1); // THIS EVALUATES STOPS
////// Убираем лишние сигналы /////////////
Buy=ExRem(Buy,Sell);
///////////// Рисуем всякое ///////////////
Plot(C,"price",1,128);
Plot(MA1, "MA1", colorBlue);
Plot(MA2, "MA2", colorBlue);
PlotShapes(IIf(Buy,shapeUpArrow,0),5,0,Graph0,-15);
PlotShapes(IIf(Sell == 3,shapeDownArrow,0),colorRed,0,Graph0,-15);
PlotShapes(IIf(Sell == 2,shapeDownArrow,0),colorRed,0,Graph0,-15);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Кстати. Если используете функцию Equity(), то убирать лишние сигналы при помощи ExRem вообще не надо, Equity() это и так делает. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
tvilsa
Гость
|
спасибо большое. все понятно сейчас попробую.
Все заработало. Еще раз спасибо. |
|
|
|
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|