[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 232

 

Dmido писал(а) >>

Доброго времени суток)


Снова к вам с вопросом, долго избегал из-за непонимания отложенников в советниках, но всё-таки прижало. Никак не могу понять как задаётся цена в отложенном ордере? Что вставлять вместо BID и ASK ? Можно любую переменную вычисляемую до этого? Тогда как забить так, чтобы данная цена потом проходила при постановке ордера? А то выходит море ошибок что мол нет такой цены и прочее....


Если не сложно можно ответ пояснить кодом... А то в поиске столько перелопатил да везде как то сбоку на эту тему написано...(((

В качестве значений Ask и Bid по идеи должны выступать текущие значения самих Ask и Bid, или переменные рассчитаны ранее.

Тут есть одна особенность, брать эти значения как реальные можно только для ордеров Buy и Sell.


Лучше всего оформить открытие всех ордеров в виде по крайней мере 6 процедур, а именно: OrderSendBuy, OrderSendSell, OrderSendLimitBuy, OrderSendLimitSell, OrderSendStopBuy и OrderSendStopSell.


PS

Следует отметить, что лимитные ордера открываются по лучшей цене (с отступом на определенное количество пунктов от текущей цены), а стоповые ордера выставляются в обратном направлении выше или ниже текущей цены .


Пример кода открытия с рынка:

//Procedure OrderSendBuy
void OrderSendBuy(string WorkSymbol, double LotsSize=0, int Slippage=3,int SizeSL=0, int SizeTP=100,
string Text=NULL, int MN=0, datetime Expiration=0, color OrdrtColor=CLR_NONE)
{
//----------------------------------------------------------------------------//
// Служебные переменные
double RealAsk, RealBid; //Текущие Ask и Bid инструмента
double SymbolPoint; //Размер пункта текущего инструмента
double SL, TP; // StopLoss и TakeProfit будущей позиции

int TicketNew; //Тикер новой позиции (в случае удачи, иначе -1)
//----------------------------------------------------------------------------//
//Зашита от дурака
  if(LotsSize<MarketInfo(WorkSymbol,MODE_MINLOT)){LotsSize = MarketInfo(WorkSymbol,MODE_MINLOT);}

//Расчет параметров для новой позиции
SymbolPoint = MarketInfo(WorkSymbol,MODE_POINT); //Определяем размер пункта
RealAsk = MarketInfo(WorkSymbol,MODE_ASK); //Определяем Ask
RealBid = MarketInfo(WorkSymbol,MODE_BID); //Определяем Bid

if(SizeTP>0){TP = RealAsk+SizeTP*SymbolPoint;}else{TP = RealAsk+100*SymbolPoint;}
if(SizeSL>0){SL = RealBid-SizeSL*SymbolPoint;}else{SL = 0;}
//Попытка открыть позицию с рынка
TicketNew = OrderSend(WorkSymbol,OP_BUY,LotsSize,RealAsk,Slippage,SL,TP,Text,MN,Expiration,OrdrtColor);
//Проверка ошибок возникших при открытии новой позиции
if(TicketNew==-1)
//При открытии произошла ошибка
{
Print("Попытка открыть Market-Buy позицию по паре ",WorkSymbol," окончилась неудачно. Код ошибки #",GetLastError())
;}
else
//Позиция успешно установлена
{
Print("Успешно создана позиция Market-Buy по паре ",WorkSymbol," Тикер новой позиции #",TicketNow);
Alert("Open market-Buy, ticket ",TicketNew," Open price ",RealAsk," Profit ",TP," SL ",SL);
}
//----------------------------------------------------------------------------//
}


 

Пример кода установки отложенного ордера:

//Procedure OrderSendLimitBuy
void OrderSendLimitBuy(string WorkSymbol, double LotsSize=0, int Slippage=3,int LimitStep=50,int SizeSL=0, int SizeTP=100,
string Text=NULL, int MN=0, datetime Expiration=0, color OrdrtColor=CLR_NONE)
{
//----------------------------------------------------------------------------//
// Служебные переменные
double RealAsk, RealBid; //Текущие Ask и Bid инструмента
double OpenPrice; //Цена на которую будет установлен отложник

double SymbolPoint; //Размер пункта текущего инструмента
double SL, TP; // StopLoss и TakeProfit будущей позиции

int TicketNew; //Тикер новой позиции (в случае удачи, иначе -1)
//----------------------------------------------------------------------------//
//Зашита от дурака
  if(LotsSize<MarketInfo(WorkSymbol,MODE_MINLOT)){LotsSize = MarketInfo(WorkSymbol,MODE_MINLOT);}

//Расчет параметров для новой позиции
SymbolPoint = MarketInfo(WorkSymbol,MODE_POINT); //Определяем размер пункта
RealAsk = MarketInfo(WorkSymbol,MODE_ASK); //Определяем Ask
RealBid = MarketInfo(WorkSymbol,MODE_BID); //Определяем Bid

OpenPrice = RealAsk-LimitStep*SymbolPoint; //Цена на которую будет установлен отложник

if(SizeTP>0){TP = OpenPrice+SizeTP*SymbolPoint;}else{TP = OpenPrice+100*SymbolPoint;}
if(SizeSL>0){SL = RealBid-(SizeSL+LimitStep)*SymbolPoint;}else{SL = 0;}
//Попытка открыть позицию с рынка
TicketNew = OrderSend(WorkSymbol,OP_BUYLIMIT,LotsSize,OpenPrice,Slippage,SL,TP,Text,MN,Expiration,OrdrtColor);
//Проверка ошибок возникших при открытии новой позиции
if(TicketNew==-1)
//При открытии произошла ошибка
{
Print("Попытка создать Limit-Buy по паре ",WorkSymbol," окончилась неудачно. Код ошибки #",GetLastError())
;}
else
//Позиция успешно установлена
{
Print("Успешно создан ордер Limit-Buy по паре ",WorkSymbol," Тикер ордера #",TicketNow);
Alert("Create Limit-Buy, ticket ",TicketNew," Open price ",OpenPrice," Profit ",TP," SL ",SL);
}
//----------------------------------------------------------------------------//
}
 

Здравствуйте.

Тестирую советника.

Период День (D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
Модель Все тики (наиболее точный метод на основе всех наименьших доступных таймфреймов)
Баров в истории 1259 Смоделировано тиков 8769661 Качество моделирования n/a
Ошибки рассогласования графиков 225

И получаю ошибки рассогласования. Можно как то их избежать? Не понимаю - это большое или маленькое количество ошибок. Шкала выдает преймущественно зеленый и темно зеленый цвет, но заполнена только примерно на 20%. И качество моделирования n/a - это проблема?

Может не стоит даже обращать внимание, просто не пойму ...

Заранее благодарю.

 
RedFish >>:

Здравствуйте.

Тестирую советника.

Период День (D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
Модель Все тики (наиболее точный метод на основе всех наименьших доступных таймфреймов)
Баров в истории 1259 Смоделировано тиков 8769661 Качество моделирования n/a
Ошибки рассогласования графиков 225

И получаю ошибки рассогласования. Можно как то их избежать? Не понимаю - это большое или маленькое количество ошибок. Шкала выдает преймущественно зеленый и темно зеленый цвет, но заполнена только примерно на 20%. И качество моделирования n/a - это проблема?

Может не стоит даже обращать внимание, просто не пойму ...

Заранее благодарю.

Не знаю я лично никогда не заморачиваюсь такими вещами (поскольку почти всегда тестирую стратегии без визуализации).


Вот что получилось на евре D1 с аналогичным периодом тестирования

Попытка №1: Баров в истории - 1302 Смоделировано тиков - 4313293 Качество моделирования - 50.00%

Попытка №2: Баров в истории - 1303 Смоделировано тиков - 4323442 Качество моделирования - 50.00%
Ошибки рассогласования графиков - 0.

 
Interesting писал(а) >>

Не знаю я лично никогда не заморачиваюсь такими вещами (поскольку почти всегда тестирую стратегии без визуализации).

Вот что получилось на евре D1 с аналогичным периодом тестирования

Попытка №1: Баров в истории - 1302 Смоделировано тиков - 4313293 Качество моделирования - 50.00%

Попытка №2: Баров в истории - 1303 Смоделировано тиков - 4323442 Качество моделирования - 50.00%
Ошибки рассогласования графиков - 0.

Спасибо.

Я думаю теперь, что МТ в автомате загоняет последнии 512 баров, а остальное заливает .... еще как то (не знаю как точнее выразится). У меня советник трендовый и мне дистанция важна, а 512 баров маловато.

А можно где нибудь качнуть один раз себе историю котировок" и гонять потом?

Благодарю.

 

Добрый день, уважаемые.

Что-то туплю в последнее время, наверно, погода влияет.

Подскажите, пожалуйста, как обьявить одномерный массив (в индикаторе), если число элементов массива задаётся внешней переменной.

Спасибо.

 
RedFish >>:

Здравствуйте.

Тестирую советника.

ПериодДень (D1) 2008.09.01 00:00 - 2009.08.31 00:00 (2008.09.01 - 2009.09.01)
МодельВсе тики (наиболее точный метод на основе всех наименьших доступных таймфреймов)
Баров в истории1259Смоделировано тиков8769661Качество моделированияn/a
Ошибки рассогласования графиков225

И получаю ошибки рассогласования. Можно как то их избежать? Не понимаю - это большое или маленькое количество ошибок. Шкала выдает преймущественно зеленый и темно зеленый цвет, но заполнена только примерно на 20%. И качество моделирования n/a - это проблема?

Может не стоит даже обращать внимание, просто не пойму ...

Заранее благодарю.

Мое нижесказанное ИМХО, но являющееся цитатами- поправьте, пожалуйста, если ошибаюсь:

Дело в том, что Close 59-й минутки, Close 45-на М15, Close 30 на М30 И Close на H1 могут НЕ совладать.

Чтобы совпадало-, нужно убить собственную историю, закачав историю с сервера котировок за меньший период

и пересчитав все таймфреймы по скачанной истории.

При этом в реале Close на разных таймфреймах также может не совпадать.

Т.е. по-хорошему, нужно брать меньший таймфрейм и считать значения бОльшего таймфрейма РУКАМИ.

 
alderru >>:

Добрый день, уважаемые.

Что-то туплю в последнее время, наверно, погода влияет.

Подскажите, пожалуйста, как обьявить одномерный массив (в индикаторе), если число элементов массива задаётся внешней переменной.

Спасибо.

int y[];

extern int blah-blah = 100;

init() {

ArrayResize(y, blah-blah);

}

 
jartmailru писал(а) >>

Мое нижесказанное ИМХО, но являющееся цитатами- поправьте, пожалуйста, если ошибаюсь:

Дело в том, что Close 59-й минутки, Close 45-на М15, Close 30 на М30 И Close на H1 могут НЕ совладать.

Чтобы совпадало-, нужно убить собственную историю, закачав историю с сервера котировок за меньший период

и пересчитав все таймфреймы по скачанной истории.

При этом в реале Close на разных таймфреймах также может не совпадать.

Т.е. по-хорошему, нужно брать меньший таймфрейм и считать значения бОльшего таймфрейма РУКАМИ.

О! Руками!!!

За ответ спасибо. Но судя по первой части, я понял, что ошибки не носят для меня критический характер. Отдельно огромное спасибо за объяснение механизма появления этих ошибок.

 
Господа проблема в коде можете помочь!
for (shift = CountBars; shift>=0; shift--) 
{ 
         cci1 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, shift-1);
         cci2 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, shift);  

         if (cci1>100) // (b4plusdi>b4minusdi && nowplusdi<nowminusdi)
         {
         val1[shift]=Low[shift]-5*Point;
         if (flagval2==0) { Alert("не забудь отправить письмо о БАЙ"); flagval2=1; flagval1=0;}
         }
         if (cci1<-100) //(b4plusdi<b4minusdi && nowplusdi>nowminusdi) 
         {
         val2[shift]=High[shift]+5*Point;
         if (flagval1==0) { Alert("не забудь отправить письмо о СЕЛЛ"); flagval2=0; flagval1=1;}
         }
   }
   return(0);
}

в самом вверху есть:

int flagval1=0;
int flagval2=0;

я что парюсь конкретно, с этими флагами, на свежую голову может кто посмотреть?

-----------------

и еще проблема в коде советника:

//---------------------------------------------------------------- 5.1 
   cci1 = iCCI(NULL, 0, kCCI, PRICE_TYPICAL, 1);

   if (New_Bar==true && cci1>100 && flagval2==1)                // && MA_3_t==0   && wayDOWN==true
     {                                            
         Opn_B=true; New_Bar=false; Cls_S=true;                                  
         flagval1=1;
         flagval2=0;
     }
     
   if (New_Bar==true && cci1<-100 && flagval1==1)                 // && MA_4_t==0  && wayUP==true
     {                                                   
         Opn_S=true; New_Bar=false; Cls_B=true;
         flagval2=1;
         flagval1=0;
     }
//--------------------------------------------------------------- 6 --

не торгует! Может кто свежим взглядом посмотрит.

решил по тупому как только в 100 (-100) уходит торговать!

прикрепляю советника!

Файлы:
stoch_cros.mq4  17 kb
Причина обращения: