| / | Форум |
|
vizirn
06.09.2006 21:35
Пытаюсь написать код трейлинга профитных ордеров,но ничего
не выходит.
Сделать простой трал проблем нет. Мне надо вот что:ордер с профитом в два пункта,эксперт подтягивает стоплосс на безубыток,профит 4 пункта-стоплосс 2 и т.д., но так у многих ДЦ это невозможно,то надо чтобы эти данные эксперт писал допустим в массив,то есть трал без фактического изменения стоплосса с шагом минимум в 2 пункта. Если не не трудно то напишите пожалуйста этот код. Заранее благодарен. |
|
Бесплатная Groupware для групп разработчиков Установите систему групповой работы TeamWox и объедините усилия всех разработчиков. Это поможет вашей команде работать быстрее и организованнее. Благодаря TeamWox станет намного проще ставить задачи и контролировать их выполнение. |
|
komposter
06.09.2006 23:34
Навскидку:
double max_bid = 0.0; int start() { if ( Bid - max_bid > 0.0 ) { max_bid = Bid; } if ( max_bid - Bid >= 2*Point ) { OrderClose(....); } ... if (...) { OrderSend(OP_BUY); max_bid = Ask; } } И тоже самое для селл, только бид и аск поменять местами ;) |
|
vizirn
07.09.2006 01:51
Мдя...
Вставте пожалуйста код трала в этого эксперта. #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" double a, b; extern int Shift = 2; extern double Lot=0.1; bool x; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ //---------------------------------------------------------------------------- int start(){ if(Bid-iOpen(Symbol(),PERIOD_H1,0)>0)x=true; else x=false; if (Ask-a>=Shift*Point && x==false) {OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+18*Point,0,"eurusd",0,0,CLR_NONE);max_ask=Ask;} if (b-Bid>=Shift*Point && x==true) {OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-18*Point,0,"eurusd",0,0,CLR_NONE);max_bid=Bid;} a=Ask; b=Bid; return(0);} |
|
komposter
07.09.2006 03:18
extern int Shift = 2; extern double Lot=0.1; bool x; double a, b, max_bid = 0.0, min_ask = 0.0; int buy = 0, sell = 0; int start() { if ( Bid - max_bid > 0.0 ) { max_bid = Bid; } if ( min_ask - Ask > 0.0 ) { min_ask = Ask; } if(Bid-iOpen(Symbol(),PERIOD_H1,0)>0)x=true; else x=false; if (Ask-a>=Shift*Point && x==false) {OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+18*Point,0,"eurusd",123,0,CLR_NONE);min_ask=Bid;} if (b-Bid>=Shift*Point && x==true) {OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-18*Point,0,"eurusd",123,0,CLR_NONE);max_bid=Ask;} a=Ask; b=Bid; int _GetLastError, _OrdersTotal = OrdersTotal(); for ( int z = _OrdersTotal - 1; z >= 0; z -- ) { if ( !OrderSelect( z, SELECT_BY_POS, MODE_TRADES ) ) { _GetLastError = GetLastError(); Print( "OrderSelect( ", z, ", SELECT_BY_POS, MODE_TRADES ) - Error #", _GetLastError ); continue; } if ( OrderMagicNumber() != 123 || OrderSymbol() != _Symbol ) { continue; } if ( OrderType() == OP_BUY ) { if ( Bid - OrderOpenPrice() >= 0 && max_bid - Bid >= 2*Point ) { OrderClose( OrderTicket(), OrderLots(), Bid, 3, CLR_NONE ); continue; } } if ( OrderType() == OP_SELL ) { if ( OrderOpenPrice() - Ask >= 0 && Ask - min_ask >= 2*Point ) { OrderClose( OrderTicket(), OrderLots(), Ask, 3, CLR_NONE ); continue; } } } return(0);} |
|
vizirn
07.09.2006 04:02
Спасибо.
|
|
lsv
07.09.2006 08:29
Когда-то и меня посещала подобная идея, закрывать прибыльные
ордера при откате на некоторое значение, я брал процент от максимума.
Слил весь демо-счет. Прибыль, в вашем случае, 1-2 пункта, а убыток
по соп-лосу пунктов 18.
|
|
vizirn
07.09.2006 08:51
Почему 1-2 пункта?
В тестере максимальная прибыльная сделка была 190 пунктов,при этом максимальная убыточная 18 пунктов. При этом средняя прибыльная 27 пунктов. |
|
lsv
07.09.2006 09:41
А вы когда-нибудь видели в реальности скачек цены в 190 пунктов?!!
Тестер, это такая жутко тупая вещь, если у него появляется бар,
у которого цена выхода – цена входа = 190 пунктов, то он вам и сгенерит
тик в 190 пунктов. И еще, таких экспертов тестить надо на периоде
M1 (все тики) и то результат будет грубый.
|
|
vizirn
07.09.2006 09:49
Согласен что тестер вещь тупая и 190 он может и загнул конечно,
но 50-100 пунктов,а то и больше,во время новостей обычное явление.
|
|
lsv
07.09.2006 10:25
Это в лучшем случае раз в неделю и то не больше 20 пунктов, они
не смогут окупить убыток. Поставь на демо-счет хотя бы на сутки
и посмотри результат, 1-3 пункта с ордера и таких ордеров будет
много и несколько ордеров со стоп-лосами, убыток от которых
перекроет все. Хочешь своего эксперта дам?
|
|
Simca
07.09.2006 13:07
А еще лучше изначально смотреть не в сторону стандартного трейлинга
(читай тупое таскание стопа за текущей ценой), а подумать о трейлинге
основанном на информации новых СФОРМИРОВАННЫХ баров (т.е. срабатывает на открытии нового бара на основании
уже сформированных баров). Способы возможны различные: уровни последних фракталов,
уровни параболика (Parabolic SAR), трейлинг работающий от собственного первоначального стоп-лосса по принципу параболика, уровень среднего истинного
диапазона (ATR) с коэффициентом ну и прочее. В общем идея надеюсь
понятна, сделать дискретный трейлинг адекватный (адаптирующийся)
к графику цены.
|
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий