[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 150

 

точнее даже совсем перестал открывать позиции и ошибка в журнале 138

 

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

и после того как я вставил строку кода = советник стал открывать четко одну позу по условию,как я и запланировал.

int start()
   {
// начало открытия ордеров 
   if (OrdersTotal()>0)return(0);
 
first_may:

СМЕ - это что?

о_О - СМЕ
 
BeerGod:
Бывало такое, я так понял это козни ДЦ чтоб проблематично было что либо тестить.
ДЦ не имеет отношения к котировкам, загруженным с сервера исторических данных.
 
ДЦ не имеет отношения к котировкам, загруженным с сервера исторических данных.

Ну как бы всё "по идее" с единого сервера грузится... Также я думал, что в тестере никак не влияет кредитное плечо текущего счёта... однако у кое-каких ДЦ такая уличная магия вполне имеет место... Может и с котировками некоторые ДЦ как-то могут играться? (хотя тут скорее всего у всех проблемы)
 
alex12:

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

и после того как я вставил строку кода = советник стал открывать четко одну позу по условию,как я и запланировал.

Ну... это только видимое соответствие запланированному. Такая конструкция не учитывает ни символ, ни тип ордера, ни его магик. Т.е, если на счёте работает ещё один советник по другому символу, то этот не будет работать - ведь позиция уже есть. Если работает только этот советник, но есть позиция Селл, а нужно открыть Бай - он её не откроет - позиция уже есть и ещё можно найти множество камушков - например вы вручную открыли позицию или выставили отложку - всё, советник встал...

Вам нужно проверять конкретно: А есть ли уже открытая позиция по такому-то символу, с таким-то магиком и такого-то типа. Если нету - открыть.

 
artmedia70:

Ну... это только видимое соответствие запланированному. Такая конструкция не учитывает ни символ, ни тип ордера, ни его магик. Т.е, если на счёте работает ещё один советник по другому символу, то этот не будет работать - ведь позиция уже есть. Если работает только этот советник, но есть позиция Селл, а нужно открыть Бай - он её не откроет - позиция уже есть и ещё можно найти множество камушков - например вы вручную открыли позицию или выставили отложку - всё, советник встал...

Вам нужно проверять конкретно: А есть ли уже открытая позиция по такому-то символу, с таким-то магиком и такого-то типа. Если нету - открыть.

Cпасибо.Да это верно,потому что этот советник открывает баи только на продолжение движения и
только после закрытия позы бай по тэйку.Например если поза бай открыта и цена идет вниз до
заданного уровня,то еще одна поза на бай не открывается (а должна была бы открыться по условию ТС).
В строках ордера сенд - разделе цена я прописал конкретную цену - вообщем см.код ниже.
Передо мной стоит задача - вписать в советник правильный код = чтобы после открытия позы бай,
если цена уходит вниз до заданного уровня - открыть еще одну позу бай.И так какой бы
заданный в коде уровень цена не пересекла - всегда открывать позу бай,независимо от того сколько

имеется открытых поз на данный момент.

extern double Lot=1;

int g=20; //тейкпрофит

double price[10];   // Заданный уровень 

//-----------------------
 
int init()
  {
  
double price[10];   // объявляем массив из 5 элементов  
           
price[0] = 1.2100; // обращаемся к первому элементу массива и 
                   // присваиваем ему цену. Обратите внимание 
                   // на то, что индекс первого элемента 
                   // начинается с 0. Это важная особенность,
                   // к которой нужно привыкнуть.   
 
price[1] = 1.2200;  // обращаемся ко второму элементу 
price[2] = 1.2300;  // и так далее 
price[3] = 1.2400; 
price[4] = 1.2500;
price[5] = 1.2600; 
price[6] = 1.2700;  
price[7] = 1.2800; 
price[8] = 1.2900;
price[9] = 1.3000;  

   return(0);
  }
//---------------
int start()
   {
// начало открытия ордеров 
   if (OrdersTotal()>0)return(0);
   
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)//проверка наличия откр.поз
   price[0]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",11);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[1]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",12);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[2]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",13);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[3]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",14);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[4]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",15);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[5]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2600,10,0,Ask+g*Point,"My order #",16);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[6]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2700,10,0,Ask+g*Point,"My order #",17);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[7]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2800,10,0,Ask+g*Point,"My order #",18);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[8]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.2900,10,0,Ask+g*Point,"My order #",19);
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   price[9]=Ask;
   {
   OrderSend (Symbol(),OP_BUY,Lot,1.3000,10,0,Ask+g*Point,"My order #",20);
   }
      return(0);
  }
//+------------------------------------------------------------------+
 
Добрый день. Хочется оптимизировать код. В индикаторе дописал три буфера. Потом долгий поиск сигнала в них, сначало поиск в МА1[] потом МА2[] и МА3[]. Получается много почти однообразного кода, раздница только в цифре названия буфера над которым идут вычисления . Можно ли это дело зациклить.
 
alex12:
Да это верно,потому что этот советник открывает баи только на продолжение движения и
только после закрытия позы бай по тэйку....
Открывающую фигурную скобку { надо ставить перед price[...]=Ask; (см. ниже). Почитайте ещё раз про операотр if. Если сразу же после if нет скобки, то он обрабатывает только одно действие (у вас price[...]=Ask;), если надо несколько действий то их надо заключить в {...} сразу же после if.
if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)//проверка наличия откр.поз
   { 
      price[0]=Ask;
      OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",11);
   }
if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
      price[1]=Ask;
      OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",12);
   }
 

Добрый день.

Нужна история по EURUSD m5/m15 с началом ранее 2009 года, не поделится ли кто своей? (т.е. той, на которой вы отлаживаете своих экспертов).

Буду очень признателен.