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

 

Всем привет

подскажите пжалста, почему совок покупает, а когда созрели условия не закрывает позицию

/---- input parameters
extern int PerRSI=8;
extern int MagicNamber=77771;
extern double Lots=1.0;
//+------------------------------------------------------------------+
int start()
{
int
cnt, // индекс ордера
ticket, // идентификационный номер ордера
total; // число уже открытых ордеров
double
rsi_0, // Значен. rsi_0 текущее
rsi_1; // Значен. rsi_1 1й бар
if (Bars<100)
{
Print("bars less than 100");
return(0);
}
total=OrdersTotal();
if(total<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Текущий бар
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Текущий бар плюс 1

if(rsi_0 < rsi_1 && rsi_0 < 30) // Если линия пересекла 30
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // это откр поз? OP_BUY или OP_SELL
{
if(OrderType()==OP_BUY) // открыта дл позиция
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // Если линия пересекла 70
{
OrderClose(OrderTicket(),1,Bid,3,Violet); // закрываем позицию

return(0); // выходим
}}}}}}
 
KoZaNOStra >>:

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}


А это что за хрень? Для чего здесь OrderSelect()?


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

 
Как разукрасить график, чтобы видно было движение трейлинга ?
 
anat писал(а) >>

Большое спасибо за помощь! А также condor - у. Теперь другая неприятность. Вот открыли, например, 10 позиций на покупку. При закрытии по стопу или тейку 1,2,3, и т.д. позиций, советник, при наличии сигнала на покупку, начинает покупать. А мне надо, что бы сначала ВСЕ ордера закрылись, а уже потом, когда нет ни одной открытой позиции, начинался новый цикл торговли. Т.е. нужен счётчик. Сначала открытых позиций до заданного числа, а затем, при закрытии позиций, до нуля. Заранее благодарен.

Сейчас именно так и зделано. Пока есть хоть один открытый ордер, другой не откроется. А если надо зделать по другому, то пишите точнее. И уж выбираёте - то ли открываются ордера кjulf есть открытые позиции, то-ли не открываются.

 

А вот такой вопросик:

а есть ли какие-либо отладочные средства в мета-трейдере ?

Плиз поделитесь опытом - как Вы занимаетесь отладкой скриптов и советников ?

это же все связано с цифрами, параметрами, витвлениями алгоритмов и тд. Как же отлавливать возникающие в алгоритме баги ?

 
Ryan_ryan >>:

А вот такой вопросик:

а есть ли какие-либо отладочные средства в мета-трейдере ?

Плиз поделитесь опытом - как Вы занимаетесь отладкой скриптов и советников ?

Если возникает необходимость в отладке, то через Print()

Но в большинстве случаев такая необходимость не возникает.

 

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
  bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
  if (sellclose) 
  {
  PlaySound("money.wav");
  }
  else 
  {
  Print("Ошибка : ",Error(GetLastError()));
  PlaySound("timeout.wav");  
  }

Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?

 
Dimoncheg писал(а) >>

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?

А что, после первого if скобка не закрывается ???

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Чё-то эта строка вообще выпадает как-то

 
Dimoncheg >>:

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Подскажите пожайлуста почему в этой конструкции после закрытия ордера звучит сначала "timeout.wav", в журнале вылазит "Нет ошибки" равное количеству закрываемых ордеров (если закрывается 2 ордера то два раза "Нет ошибки" вылезет итд) а потом уже "money.wav". Самый прикол что это только для коротких сделок, для длинных все работает нормально. Кто знает в чем прикол и как это лечится?


Условие под 1-м условным оператором if у Вас действует только на следующий за ним оператор (следующая строка).

Остальные выполняются БЕЗУСЛОВНО. Т.е. даже если нет команды на закрытие ордера, то один из плейсаундов отработает.

Правильнее так:

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()==mnum) 
  {
     bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
     if (sellclose) 
        PlaySound("money.wav");
     else 
     {
        Print("Ошибка : ",Error(GetLastError()));
        PlaySound("timeout.wav");  
     }
  }
 
infinum13 >>:

А что, после первого if скобка не закрывается ???

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Чё-то эта строка вообще выпадает как-то

Закрывается, эт я удалил случайно, иначе бы не скомпилировалось если бы ее не было, if(OrderType()==OP_SELL && OrderMagicNumber()==mnum выпадать то выпадает но работает че самый прикол и по коротким и по длинным сделкам, а ошибка "Нет ошибки" со звуком "timeout.wav" срабатывает только для коротких сделок, для длинных конструкция работает нормально, там теже скобки и все одинаково

Причина обращения: