Советники: Master_MM_Droid - страница 3

 
smartbutterfly:
Ахах, полноценная не продается)) Во-первых, я понятия не имею как вообще можно на продаже советника заработать, да и за сколько его продавать, а во-вторых, полноценная версия, то есть "Master_MM_droid, version 5" только около 3 месяцев тестируется на реальном счете, и у меня уже есть как минимум один повод для недовольства, для модернизации же и доведения до ума необходимо выбрать время а я ленюсь.

Для этого придумали бета-тестирование )))
 
evillive:

Для этого придумали бета-тестирование )))

Действительно, только что глянул, я вырезал скейлинг и поэтому упростил код до одной функции. В последней версии через рутину реализовано. Не знаю, как здесь редактировать исходный код. Наверное заново выкладывать нужно? Кто-нибудь подскажите, можно ли изменить код своего советника или надо заново выкладывать? Для примера вот часть изначального кода, при вызове следует тип указать OP_BUYSTOP или OP_SELLSTOP :

}
//+------------------------------------------------------------------+
//Макрофункция закрытия ордеров
void close_all(int cmd)
{
show_info();
for(int i=OrdersTotal()-1;i>=0;i--)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     if(OrderType()==cmd) close_order(OrderTicket());
return;
}
//+------------------------------------------------------------------+
//Рутина для закрытия ордера
void close_order(int ticket)
{
double price = 0;
bool temp = false;
int count = 0;
 while(!IsTradeAllowed()) Sleep(100);
 
 if(OrderType()==OP_BUY)  price = NormalizeDouble(Bid,Digits);
 if(OrderType()==OP_SELL) price = NormalizeDouble(Ask,Digits);
 if(OrderSelect(ticket,SELECT_BY_TICKET))
     while(temp == false)
     {
     if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) temp = OrderDelete(ticket); 
     else temp = OrderClose(ticket,OrderLots(),price,slippage,CLR_NONE);
     Sleep(30000); RefreshRates();count++; 
     if (count > try) break;
     }  
return;
}
//+------------------------------------------------------------------+ 
 
 

Всё проще, думаю будет достаточно изменить функцию

//-----------------------закрытие
void clear_orders(string symbol, int mn) 
{
 int count = 0;
   for (int i = OrdersTotal() - 1; i >= 0; i--) 
      {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == symbol && OrderMagicNumber() == mn && (OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP))
 while(OrderDelete(OrderTicket()) < 0)
  {Sleep(30000); RefreshRates(); count++; if (count > 5) break;}
      }
}
 

Закомментируйте функцию clear_all() в местах вызова, она не нужна. Вот исправленная функция close_all() вместе с удаленной рутиной:

Отредактировал прям здесь, вроде ошибок синтаксиса нет.

void close_all(string symbol, int mn){
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == symbol && OrderMagicNumber()==mn) close_order(OrderTicket());
return;
}
//+------------------------------------------------------------------+
//Рутина для закрытия ордера
void close_order(int ticket)
{
double price = 0;
bool temp = false;
int count = 0;
 while(!IsTradeAllowed()) Sleep(100);
 if(OrderType()==OP_BUY)  price = NormalizeDouble(Bid,Digits);
 if(OrderType()==OP_SELL) price = NormalizeDouble(Ask,Digits);
 if(OrderSelect(ticket,SELECT_BY_TICKET))
     while(temp == false)
     {
     if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) temp = OrderDelete(ticket); 
     else temp = OrderClose(ticket,OrderLots(),price,slippage,CLR_NONE);
     Sleep(30000); RefreshRates();count++; 
     if (count > try) break;
     }  
return;
}
 
evillive:

Всё проще, думаю будет достаточно изменить функцию

....

Если хотите, можно и так, но я только что выложил немного восстановленный функционал. К сожалению, код у последней версии просто чудовищное спагетти, поэтому когда вырезал, увлекся упрощением. Да, бывает.

 
smartbutterfly:

Закомментируйте функцию clear_all() в местах вызова, она не нужна. Вот исправленная функция close_all() вместе с удаленной рутиной:

Отредактировал прям здесь, вроде ошибок синтаксиса нет.

 .

ошипка

'try' - variable not defined     (256, 18)

добавил в начало кода, если верно понял что там за переменная:

extern int try = 5;                      //попыток удалить отложку

Как бы ещё научить его убирать за собой значки сработавших или удалённых ордеров...

 
evillive:

Как бы ещё научить его убирать за собой значки сработавших или удалённых ордеров...

замени везде на CLR_NONE
 
smartbutterfly:
evillive:

Как бы ещё научить его убирать за собой значки сработавших или удалённых ордеров...

замени везде на CLR_NONE

В смысле - чтобы он вообще их не ставил? Ну, можно и так.
 
Исправленную версию советника можно взять отсюда, буду её тестить пока не найду что-то поинтереснее :)
 

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


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