[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 149

 

подскажите пож-та новичку, AccountBalance() - показывает количество средств на балансе, а мне нужно высчитать свой расчетный баланс (calc_balance),

суть его простая, только пока не поддается написанию, есть общее кол-во открытых и отложенных ордеров (Orderstotal),например 3 шт., макс.риск на одну открытую позицию 2%,

для того чтобы открыть следующую сделку мне надо посчитать макс. риск (2%) от расчетного баланса, т.е. логика формулы примерная будет такой: calc_balance=AccountBalance()-2%-2%-2%,

то есть последовательное вычитание - а вот как это в коде написать пока не получается, надеюсь на Вашу помощь.

Заранее спасибо!

 
Подскажите как Средства (AccountEquity() ) и Залог (AccountMargin() ) отдельно для позиций Бай и Селл?
 
T-G:
Подскажите как Средства (AccountEquity() ) и Залог (AccountMargin() ) отдельно для позиций Бай и Селл?
AccountEquity() возможен только для Вашего счёта, а AccountMargin() с Вашими условиями смотрите в очень "Полезных функциях" Кима!
 
Господа, может кто нибудь посоветует индикатор или советник, выставляющий уровни поддержки и сопротивления, на D1, без лагов желательно)))
 
Top2n:
Господа, может кто нибудь посоветует индикатор или советник, выставляющий уровни поддержки и сопротивления, на D1, без лагов желательно)))
В поиске: DailyPivotPoints
 

Всем доброго времени суток! У меня возникла проблема, и я не могу понять в чем дело.


Даны две функции. Если я вызываю 1, то ничего не работает. То втором случае, все работает. Подскажите в чем ошибка?

Заранее спасибо!

int OrderBuy(double pLots, string pComment, int pMagic, int pDatetime, color pColor)
{
   int ticket = 0;
   int err = 0;
   int c = 0;
   int NumberOfTries = 100;
   for (c = 0; c < NumberOfTries; c++) 
     {
         RefreshRates();
         ticket = OrderSend(Symbol(), OP_BUY, pLots, Ask, 0, Ask-0.0005, Ask+0.0005, pComment, pMagic, pDatetime, pColor);
         err = GetLastError();
         if (err == 0/* NO_ERROR */) break;
         if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
      }
      return(ticket);

}


int OrderSell(double pLots, string pComment, int pMagic, int pDatetime, color pColor)
{
   int ticket = 0;
   int err = 0;
   int c = 0;
   int NumberOfTries = 100;
   
   for (c = 0; c < NumberOfTries; c++) 
   {
         RefreshRates();
         ticket = OrderSend(Symbol(), OP_SELL, pLots, Bid, 0, Bid+0.0005, Bid-0.0005, pComment, pMagic, pDatetime, pColor);
         err = GetLastError();
         if (err == 0/* NO_ERROR */) break;
         if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
    }
    return(ticket);

}





//вызовы функций

ticket = OrderBuy(lot, "---"+count+" ---", MagicNumber, 0, HotPink);
         Print(ticket+":тикет");//здесь выдает -1
         if (ticket < 0) 
               {
                  Print("Error: ", GetLastError());//здесь выдает "0";
                  return (0);
               } 




ticket = OrderSell(lot, "---"+count+" ---", MagicNumber, 0, HotPink);
         Print(ticket+":тикет");
         if (ticket < 0) 
               {
                  Print("Error: ", GetLastError());
                  return (0);
               } 
 
Если хотите уложиться в расчёты терминала, самый простой способ - это отнять от того, что есть, то что останется, если открыть соответствующий ордер:
double ld_MarginPosition = AccountFreeMargin() - AccountFreeMarginCheck();
 
arabon:

Всем доброго времени суток! У меня возникла проблема, и я не могу понять в чем дело.


Даны две функции. Если я вызываю 1, то ничего не работает. То втором случае, все работает. Подскажите в чем ошибка?

Заранее спасибо!


Функция GetLastError(), которая в OrderSell и OrderBuy в цикле, обнуляет значение ошибки (см. справку по GetLastError ВНИМАТЕЛЬНО), поэтому

Print("Error: ", GetLastError());

при вызове ф-ции даст 0. Попробуйте сделать распечатку непосредственно в цикле, тогда увидите, где из-за какой ошибки не открывается ордер.

 

Сделал простенький индикатор, который "переворачивает" инструмент. Иногда, для восприятия легче видеть пару наоборот, да и "замыливается" глаз, глядя на одну и ту же картинку. К сожалению во второй части, внизу график берется от Close[i],  как, без чтения из файла(никогда даже не пробовал работать с файлом), можно вывести полноценный график, есть у кого-нибудь мысли.


Файлы:
converter.mq4  2 kb
 

Все равно не нашел ни поиском не среди функций Кима.

Как правильно рассчитать залог открытых ордеров отдельно? 

считал так:

в цикле
if (OrderType() == OP_BUY ) {  
   MarginBuy += (OrderOpenPrice()*OrderLots()/AccountLeverage())*MarketInfo(Symbol(), MODE_LOTSIZE);
}
         
if (OrderType() == OP_SELL ) {  
   MarginSell += (OrderOpenPrice()*OrderLots()/AccountLeverage())*MarketInfo(Symbol(), MODE_LOTSIZE);
}

 получались отличные значение от того что показывает терминал

 

Если хотите уложиться в расчёты терминала, самый простой способ - это отнять от того, что есть, то что останется, если открыть соответствующий ордер:
double ld_MarginPosition = AccountFreeMargin() - AccountFreeMarginCheck();


не получится просто отнять мне нужны расчеты отдельно для каждого направления.