Syte

 
Уровень 5

  Моя торговля


График торгового счета Syte


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

Рейтинг 1147



РЕКОМЕНДУЮ



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

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

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

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

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

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

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

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

  5  Syte Автор Сообщений: 109

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

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

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

  5  Syte Автор Сообщений: 109

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

  5  Syte Автор Сообщений: 109

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


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

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

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

  5  Syte Автор Сообщений: 109

  • 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

  26  AM2 Сообщений: 6479 - Андрей

  • 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 Сообщений: 330 - Матрёшковод и повелитель ГиП.

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

  5  Syte Автор Сообщений: 109

  • 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

  8  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

  5  Syte Автор Сообщений: 109

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

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

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


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

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

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

  5  Syte Автор Сообщений: 109

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

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

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

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

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