Группа "Стол заказов MQL"

Рейтинг 1093



РЕКОМЕНДУЮ



Немного грааля

Создал советник, тест за 17 лет.

Объем 0.01 Максимальный лот 0.1. Все без изменений, на протяжении всего теста. Нужна доработка. В пропорциональном увеличении. На 10 000 депозита, объем 0.01 На 20 000, 0.02. И так далее. Что бы проверить краш тестом. На максимально допустимой нагрузке депозита. Андрей выручай… *cry*  Хочу поставить на реал. Демка уже достала. Что в коде нужно добавить, что бы увеличивать объем сделки, с ростом депозита???
  • 0
  • Просмотров: 677
  • 22 августа 2017, 20:55
  • Syte
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник на основе индикатора Adx crossing
Следующая запись в группе  
просьба написать простого советника
09 августа 2017
23 августа 2017

Комментарии (18)

+
0
Качество моделирование плохое, с такими котировками у меня много граалей получалось :) 
avatar

  12  beton2011 Сообщений: 767

  • 22 августа 2017, 21:08
+
0
На демке не хуже. А котировок, других нету. Система построена, не на них, а на шуме рынка. Есть лучше котировки, дай. Тестану.
avatar

  4  Syte Автор Сообщений: 64

  • 22 августа 2017, 21:11
+
0
Если система работает на шуме рынка, то вам требуется моделирование как минимум 99%. Потому требуется каждый пункт истории. Пока не добьетесь моделирования в 99%, не ставьте на реал. Насчет демки… вы уверены, что сова отторговала достаточно времени на демо, чтобы делать по ней выводы?
avatar

  8  profitnik Сообщений: 85

  • 23 августа 2017, 04:57
+
0
Дело в том, что демка не сильно отличается от теста. В плане роста депозита. Отличие есть, но не значительное. На демке стоит три месяца. Сегодня снес систему, и потерял демку. Забыл пароль записать. Теперь думаю, ставить на реал, или еще по тестить.
avatar

  4  Syte Автор Сообщений: 64

  • 23 августа 2017, 10:03
+
0
Тест с объемом 0.1. Хочу нормальные котировки, и доп код, для увеличения производительности. ( 
avatar

  4  Syte Автор Сообщений: 64

  • 22 августа 2017, 21:12
+
0
Система построена, не на них, а на шуме рынка.


А ну тогда все понятно, до свидание.
avatar

  12  beton2011 Сообщений: 767

  • 22 августа 2017, 21:18
+
0
Ок, до свидания, так до свидания. Извините, что отвлек.
avatar

  4  Syte Автор Сообщений: 64

  • 22 августа 2017, 21:21
+
+1
Самая примитивная фича:


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   double lotstep=MarketInfo(Symbol(),MODE_LOTSTEP);
   if(Lots==0) lot=AccountBalance()/100000*Risk;
   lot=NormalizeDouble(lot/lotstep,0)*lotstep;
   if(lot<Minlot) lot=Minlot;
   if(lot>Maxlot) lot=Maxlot;
   return(lot);
  }
avatar

  25  AM2 Сообщений: 6194 - Андрей

  • 22 августа 2017, 21:45
+
+1
Будет правильно считать только на долларовых счетах. На рублевых и евро выдаст неправильный лот. Если использовать эту функцию, нужно будет добавить определение валюты депозита и сделать ветвления для каждой валюты. Вот закостыленная эта же функция, но чего в ней не так — это то, что, если курс валюты депозита изменится к доллару на большое число, то придется перебивать код.

<code>//+------------------------------------------------------------------+
// Динамичный лот
//+------------------------------------------------------------------+
double Lots()                                        
 { 
   double lot_min =MarketInfo(Symbol(),MODE_MINLOT);
   double lot_max =MarketInfo(Symbol(),MODE_MAXLOT);
   double lot_step=MarketInfo(Symbol(),MODE_LOTSTEP);
   double contract=MarketInfo(Symbol(),MODE_LOTSIZE);
   string dep     = AccountCurrency();
   double vol = 0.01;;


   if(lot_min<0 || lot_max<=0.0 || lot_step<=0.0) 
     {
      return(0);
     }
   if(AccountLeverage() <= 0)
     {
      return(0);
     }


   if ( dep == "USD")
   {
   vol=NormalizeDouble(AccountFreeMargin()*Risk/contract,2);
   vol=NormalizeDouble(vol/lot_step,0)*lot_step;
   if(vol<lot_min) vol=lot_min;
   if(vol>lot_max) vol=lot_max;
 
   }
   
   if ( dep == "EUR")
   {
   vol=NormalizeDouble(AccountFreeMargin()/1.18*Risk/contract,2);
   vol=NormalizeDouble(vol/lot_step,0)*lot_step;
   if(vol<lot_min) vol=lot_min;
   if(vol>lot_max) vol=lot_max;
   }
   
   if ( dep == "RUR")
   {
   vol=NormalizeDouble(AccountFreeMargin()/60*Risk/contract,2);
   vol=NormalizeDouble(vol/lot_step,0)*lot_step;
   if(vol<lot_min) vol=lot_min;
   if(vol>lot_max) vol=lot_max;
 
   }
   return(vol);
}</code>

Редактирован: 23 августа 2017, 05:04
avatar

  8  profitnik Сообщений: 85

  • 23 августа 2017, 04:55
+
0
Что в коде нужно добавить, что бы увеличивать объем сделки, с ростом депозита???

Собсна, самого интересует подобное.
Вопрос ко всем. По сути-то это лишь вычисление % от числа, от размера депо, так в чём возникает проблема при вычислении объёма ордера?
avatar

  12  ShamanHand Сообщений: 314 - Матрёшковод и повелитель ГиП.

  • 23 августа 2017, 06:17
+
0
Спасибо огромное. Буду пробовать.
avatar

  4  Syte Автор Сообщений: 64

  • 23 августа 2017, 09:39
+
0
У меня вот-так.

Внешние переменные:

extern string autolot_=«Настройки автолота»;
extern double Lots=0.1; // Фиксирвоанный лот
extern bool DynamicLot=false; // Динамический лот
extern double LotBalancePcnt=20; // % от депозита
extern double MaxLot=999; // Максимальный лот при расчете

Функция:

double GetSizeLot(double ll=1) //Функция возвращает значение лотов,
{
string lotcalc;
double pr;
string Valdepo=AccountCurrency();
//если включен ММ то значение лотов,
double Lot2,MinLots,MaxLots;
int lotdig;
if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)lotdig=2; else lotdig=1;
if(Valdepo==«USD»)
{
if(StringSubstr(Symbol(),0,3)==«USD»)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*
AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else if(StringSubstr(Symbol(),3,3)==«USD»)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*
AccountLeverage()/Ask/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else
{
pr=MarketInfo(StringSubstr(Symbol(),0,3)+«USD»,MODE_ASK);
if(pr!=0)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/pr/100/
MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/100/
MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
}
}
if(Valdepo==«EUR»)
{
if(StringSubstr(Symbol(),0,3)==«EUR»)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*
AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else
{
pr=MarketInfo(«EUR»+StringSubstr(Symbol(),0,3),MODE_BID);
if(pr!=0)Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()*pr/100/
MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else Lot2=NormalizeDouble(AccountFreeMargin()*LotBalancePcnt*AccountLeverage()/100/
MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
}
}

if(Valdepo==«RUR» || Valdepo==«RUB»)
{
if(StringSubstr(Symbol(),0,3)==«USD»)Lot2=NormalizeDouble(AccountFreeMargin()/40*
LotBalancePcnt*AccountLeverage()/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else if(StringSubstr(Symbol(),3,3)==«USD»)Lot2=NormalizeDouble(AccountFreeMargin()/40*
LotBalancePcnt*AccountLeverage()/Ask/100/MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else
{
pr=MarketInfo(StringSubstr(Symbol(),0,3)+«USD»,MODE_ASK);
if(pr!=0)Lot2=NormalizeDouble(AccountFreeMargin()/40*LotBalancePcnt*AccountLeverage()/pr/100/
MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
else Lot2=NormalizeDouble(AccountFreeMargin()/40*LotBalancePcnt*AccountLeverage()/100/
MarketInfo(Symbol(),MODE_LOTSIZE),lotdig);
}
}

MinLots=MarketInfo(Symbol(),MODE_MINLOT);
MaxLots=MaxLot;
lotcalc=" Autolot="+Lot2;
if(!DynamicLot)Lot2=Lots;
if(Lot2 < MinLots) Lot2 = MinLots;
if(Lot2 > MaxLots) Lot2 = MaxLots;
lotcalc=lotcalc+" MinLots="+MinLots+" LOT="+NormalizeDouble(Lot2,lotdig);
Print(lotcalc);
return(NormalizeDouble(Lot2,lotdig));
}
avatar

  7  ZEYTO Сообщений: 24

  • 23 августа 2017, 09:48
+
0
У вас аналогичная проблема. Если вы поставите эту функцию на долларовый счет, к примеру на 100 долларов, а потом поставите на рублевой счет, на 6000 рублей — лот будет разный. Потому что курс доллара к рублю, не 40, а 60.
Редактирован: 23 августа 2017, 15:46
avatar

  8  profitnik Сообщений: 85

  • 23 августа 2017, 15:44
+
0


На демке сегодня так же как и в тесте. Ни какого существенного отличия нету. Это для скептиков.
avatar

  4  Syte Автор Сообщений: 64

  • 23 августа 2017, 12:37
+
+1
Видите ли, мы сомневаться можем сколько угодно, но денежную ответственность, в любом случае, понесете только вы.
avatar

  8  profitnik Сообщений: 85

  • 23 августа 2017, 15:45
+
0
На демке сегодня так же как и в тесте. Ни какого существенного отличия нету. Это для скептиков.


Чем докажите? мы уже перестали верить картинкам, уже взрослые ребята :) 
avatar

  12  beton2011 Сообщений: 767

  • 23 августа 2017, 18:12
+
+1
Я, доказывать??? Ага, все бросил, и начал доказывать. Я тут, что, предлагаю, кому то, что то за деньги?? Или навязываю свою точку зрения??? Мне нужен просто был кусок кода, не больше. А демагогию вы развели, мол до свидания, докажите и так далее. Так, что до свидания. Я получил, что хотел. Остальное сам допишу. Спасибо Андрею.
avatar

  4  Syte Автор Сообщений: 64

  • 23 августа 2017, 18:31
+
0
До свидание.
avatar

  12  beton2011 Сообщений: 767

  • 23 августа 2017, 18:56

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари

 
Как начать: открываем первую торговую сделку за 7 шагов →