0
Ясненько… Спасибо!
avatar

Kudryashov

  • 14 ноября 2017, 11:19
0
Спасибочки!*drinks*  но это советник на mql4 а там я знаю как сделать отправку… а вот сейчас с 5 версией разбираюсь… и не получается пока что никак
avatar

Kudryashov

  • 3 ноября 2017, 11:53
0
То есть отрисовка идет вместе с первой свечей!?
«И так сойдет!»
Спасибо!
avatar

Kudryashov

  • 14 октября 2017, 09:40
0
Спасибо!
На вид все просто оказалось… а я мудрил *wizard* 
Буду разбираться
avatar

Kudryashov

  • 16 сентября 2017, 21:30
+1
Для автоматизации рутины. Я повышаю объем лота каждые 10-15 дней при условии что за это время есть прибыль.
Думаю такое не только я буду использовать.
Не спорю что также получиться, но расчет от баланса это более агрессивный метод.
avatar

Kudryashov

  • 23 февраля 2017, 23:26
0
Думаю лучше будет в виде количества дней: если пользователь поставит значение 1 то лот будет считаться каждай день, если 7 то каждую неделю, и т.д.
avatar

Kudryashov

  • 23 февраля 2017, 23:18
0
Хорошо. Спасибо!
Постараюсь в следующий раз быть внимательнее
avatar

Kudryashov

  • 23 февраля 2017, 12:49
0
Да… прошу прощения… просто дописал думал просто вставиться в одну, а вуышло 2 записи*wall* 
avatar

Kudryashov

  • 23 февраля 2017, 12:03
0
а возможно ли сделать чтобы из МТ было можно совершать действия на странице… к примеру на веб версии бинарных опционов?
avatar

Kudryashov

  • 26 января 2017, 23:35
0
Спасибо!
Ларчик оказывается просто открывался *good* 
avatar

Kudryashov

  • 7 декабря 2016, 18:45
0
Добрейшего времени суток!
Тут функцию открытия ордеров надыбал…
На сколько она правильная *tipatogo* 
В советник вставил разницы невижу
//+------------------------------------------------------------------+
//|   Функция открытия ордера                                        |
//|------------------------------------------------------------------|
//|   Параметры запроса:                                             |
//|   OpenOrder("BUY")  - Открытие ордера на покупку (BUY)           |
//|   OpenOrder("SELL") - Открытие ордера на продажу (SELL)          |
//+------------------------------------------------------------------+
void OpenOrder(string type)
{
double StopLoss = 0;
double TakeProfit = 0;
//--- Инициализация переменых ----------------------------------------
int               ticket      = 0;
string            symbol      /* Cимвол */                  = Symbol();
ENUM_ORDER_TYPE   cmd         /* Торговая операция */       = ORDER_TYPE_BUY; 
double            volume      /* Количество лотов */        = LotsOptimized();
double            price       /* Цена */                    = 0.0;
int               slippage    /* Проскальзывание */         = 3; 
double            stoploss    /* stop loss */               = 0;
double            takeprofit  /* take profit */             = 0;
string            comment     /* Комментарий */             = NULL;
int               magic       /* Идентификатор */           = MAGICMA;
datetime          expiration  /* Cрок истечения ордера */   = 0;
color             arrow_color /* Цвет */                    = clrNONE;
//--- Получим информацию по символу ----------------------------------
double bid     = MarketInfo(symbol,MODE_BID);    // Запрос значения Bid
double ask     = MarketInfo(symbol,MODE_ASK);    // Запрос значения Ask
double point   = MarketInfo(symbol,MODE_POINT);  // Запрос Point
double digits  = MarketInfo(symbol,MODE_DIGITS);  // Запрос Digits
//--------------------------------------------------------------------
//--- Подставим значения под соответствующий тип ордера --------------
if (type == "BUY")
   {
   cmd = ORDER_TYPE_BUY;
   price = NormalizeDouble(Ask,digits);
   if (StopLoss > 0) stoploss = NormalizeDouble(Bid - StopLoss * point,digits);
   if (TakeProfit > 0) takeprofit = NormalizeDouble(Ask + TakeProfit * point,digits);
   arrow_color = Green;
   }
if (type == "SELL")
   {
   cmd = ORDER_TYPE_SELL;
   price = NormalizeDouble(Bid,digits);
   if (StopLoss > 0) stoploss = NormalizeDouble(Ask + StopLoss * point,digits); 
   if (TakeProfit > 0) takeprofit = NormalizeDouble(Bid - TakeProfit * point,digits);
   arrow_color = Red;
   }
//--- Проверим достаточно ли средств для открытия ордера -------------
double free_margin=AccountFreeMarginCheck(symbol,cmd,volume);
if(free_margin<0) //Если на счету не хватает средств
   {
   string oper=(cmd==OP_BUY)? "Buy":"Sell";
   Print("Not enough money for ", oper," ",volume, " ", symbol, " Error code=",GetLastError());
   return;
   }
//--------------------------------------------------------------------
//--------------------------------------------------------------------
if(free_margin>0)
   {ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);}
//--------------------------------------------------------------------
}
//+------------------------------------------------------------------+
avatar

Kudryashov

  • 15 октября 2016, 18:43
0
Ошибка OrderSend error 131 все равно выскакивает при оптимизации ( 
Нашел на MQL4 вот такую функцию:
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
  {
//--- минимально допустимый объем для торговых операций
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
      description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- максимально допустимый объем для торговых операций
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- получим минимальную градацию объема
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
                               volume_step,ratio*volume_step);
      return(false);
     }
   description="Корректное значение объема";
   return(true);
  }

Вставил ее перед OrderSend в следующем виде:
if (CheckVolumeValue(iLots)==TRUE) ticket = OrderSend...

но при компиляции выскакивает ошибка: 'CheckVolumeValue' — wrong parameters count
Однако изменив функцию на:
bool CheckVolumeValue(double volume)
{
string description;
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);   //Минимально допустимый объем для торговых операций
if(volume<min_volume)
   {
   description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume);
   return(FALSE);
   }
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);   //Максимально допустимый объем для торговых операций
if(volume>max_volume)
   {
   description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume);
   return(FALSE);
   }
double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); //Получим минимальную градацию объема
int ratio=(int)MathRound(volume/volume_step);
if(MathAbs(ratio*volume_step-volume)>0.0000001)
   {
   description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",
                               volume_step,ratio*volume_step);
   return(FALSE);
   }
description="Корректное значение объема";
return(TRUE);
}

компиляция прошла успешно.
В связи с вышеперечисленым шаманством… вопрос:
1. Что не так сделал в первый раз когда функция выглядела так
bool CheckVolumeValue(double volume,string &description)
?
2.Насколько критичны внесенные мной изменения?
avatar

Kudryashov

  • 13 октября 2016, 20:20
0
Ясненько… А чтобы в разных направлениях считал надо разделить if (OrderType() == OP_BUY || OrderType() == OP_SELL) на 2 отдельных ЕСЛИ и дописать их сложения?*pardon* 
avatar

Kudryashov

  • 13 октября 2016, 19:16
0
Я не математик *rabota* 
Кто нибудь может обьяснить что тогда считает этот алгоритм?*help* 

gd_240 = 0;
double ld_56 = 0;
for (index = OrdersTotal() - 1; index >= 0; index--)
   {
   OrderSelect(index, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
   if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
      {
      if (OrderType() == OP_BUY || OrderType() == OP_SELL)
         {
         gd_240 += OrderOpenPrice() * OrderLots();
         ld_56 += OrderLots();
         }
      }
   }
gd_240 = NormalizeDouble(gd_240 / ld_56, Digits);


Мне говорили что высчитывает среднию цену*tipatogo* 
avatar

Kudryashov

  • 13 октября 2016, 00:48
0
В том то и дело что не могу понять какой лот правильный.
Лот определяется функцией:
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LotsOptimized()
{
//--- Инициализация переменых ----------------------------------------
double   volume     = 0;
double   lot        = 0.01;
double   exponent   = 2;
double   count      = CountOpenOrders();
int      digits     = (int)2; //MarketInfo(Symbol(),MODE_DIGITS);
//--------------------------------------------------------------------
volume = NormalizeDouble(lot * MathPow(exponent, count),digits);
//--------------------------------------------------------------------
return(volume);
}
//+------------------------------------------------------------------+/code>
avatar

Kudryashov

  • 8 октября 2016, 15:40
0
И второй вопрос: Как избавиться от OrderSend error 131?
avatar

Kudryashov

  • 8 октября 2016, 10:46
0
У меня вопрос: Обьясните великали разница между строчками for (index = 0; index < OrdersTotal(); index++) и
for (index = OrdersTotal() — 1; index >= 0; index--)?
Одно и тоже правильно!?
avatar

Kudryashov

  • 8 октября 2016, 10:44