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

 
forexnew:

Если Вы изначально определили соотношение StartBalance (стартового баланса) к StarLots (стартовому лоту) согласно установленных рисков, тогда размер доливки надо определить из эквити:

if(AccountEquity()<StartBalance) Доливка = (AccountBalance()+(StartBalance-AccountEquity()))*Новый лот/StarLots

Это без учета AccountCredit(). Если я Вас, конечно, правильно понял.


Там уже приведена формула:

Рассчитать необходимый (дополнительный) объем можно по формуле: V(доп)= (SumInv / Equity) * Lots

Где:
SumInv – Сумма новой доливки - ее размер каким - либо образом необходимо узнать программно расчитать на конкретный момент времени (ранее известный),
Equity – Эквити счета на этот же момент времени - это значение получается из ф-ии получения инф-ии о торговом счете:

double AccountEquity( ) 
Возвращает сумму собственных средств для текущего счета.  


Lots – Объем приобретенных ранее (на старте) активов, допустим 1 лот.
Это означает, что для корректировки позиций, необходимо знать значение переменной SumInv...

Какой существует оптимальный вариант решения программного расчета данной переменной, при условии, что она не равна нулю?

 
Roman.:


Там уже приведена формула:

Рассчитать необходимый (дополнительный) объем можно по формуле: V(доп)= (SumInv / Equity) * Lots

Где:
SumInv – Сумма новой доливки - ее размер каким - либо образом необходимо узнать программно расчитать на конкретный момент времени (ранее известный),
Equity – Эквити счета на этот же момент времени - это значение получается из ф-ии получения инф-ии о торговом счете:


Lots – Объем приобретенных ранее (на старте) активов, допустим 1 лот.
Это означает, что для корректировки позиций, необходимо знать значение переменной SumInv...

Какой существует оптимальный вариант решения программного расчета данной переменной, при условии, что она не равна нулю?

Не понимаю от чего отталкиваться при расчетах, если неизвестно, на какое количество лотов Вы хотите увеличить начальный лот. Это чисто человеческий фактор:

SumInv = "хочу повысить баланс на x баксов" + StartBalance-Equity

Или Вам неизвестен оптимальный стартовый баланс от которого нужно плясать? Его надо рассчитывать из размера стопов и плеча.

У меня в советнике все расчеты идут от размера стопов, отсюда пляшет оптимальный стартовый баланс (он не обязательно равен начальному балансу), а далее идет автоматический расчет стартового лота.


 
forexnew:

Не понимаю от чего отталкиваться при расчетах, если неизвестно, на какое количество лотов Вы хотите увеличить начальный лот. Это чисто человеческий фактор:

SumInv = "хочу повысить баланс на x баксов" + StartBalance-Equity

Или Вам неизвестен оптимальный стартовый баланс от которого нужно плясать? Его надо рассчитывать из размера стопов и плеча.

У меня в советнике все расчеты идут от размера стопов, отсюда пляшет оптимальный стартовый баланс (он не обязательно равен начальному балансу), а далее идет автоматический расчет стартового лота.


Все известно. Начальный лот увеличивается пропорционально произведенным доливкам по вышеприведенной формуле. Еще раз по ссылке прочтите инфу - корректировки объема позиции при вводе/выводе средств.
Вы, если в теме - просто попробуйте ответить на вопрос: Каким образом определить программно (посредством алгоритма и каких либо формул, если нет возможности напрямую через ф-ии Информация о счете) - были ли доливки на торговый счет к какому-лиюо (ранее известному) времени в течение суток (допустим в 00 час.). Остальные переменные для расчета дополнительного объема в ранее приведенной формуле, требуемого для доливки к предыдущему (стартовому) известны.

Ребята, подскажите...

 
Roman.:

Все известно. Начальный лот увеличивается пропорционально произведенным доливкам по вышеприведенной формуле. Еще раз по ссылке прочтите инфу - корректировки объема позиции при вводе/выводе средств.
Вы, если в теме - просто попробуйте ответить на вопрос: Каким образом определить программно (посредством алгоритма и каких либо формул, если нет возможности напрямую через ф-ии Информация о счете) - были ли доливки на торговый счет в какое-то (ранее известное) время в течение суток (допустим в 00 час.). Остальные переменные для расчета дополнительного объема в ранее приведенной формуле, требуемого для доливки к предыдущему (стартовому) известны.

Ребята, подскажите...

Теперь понятно. Предположим надо рассчитать программно была ли за последние сутки доливка/снятие средств. Прилагаю индикатор. Надо ввести только баланс, который был в начале расчетного периода времени и кол-во дней расчета. Надеюсь теперь я Вас правильно понял.

Файлы:
balans_9.mq4  6 kb
 

Всем привет!

Я опять со своим индикатором. По совету старших товарищей попытался сконструировать цикл, вычисляющий значение точки прямой, и заполнить этими значениями массив индикатора.

По одиночке вроде считает все верно. Вместе вешает терминал :=(

//for (i=Vnf2;i>0;i--)

// {int k=Vnf2;

// ArrayResize(Buf_DN,Vnf2+1);

// Buf_DN[i]= EquationDirect(Vnf2, VMF2, Vnf1,VMF1,k);

// k--;

// }

 

Ошибочка небольшая, но все равно вешает в таком варианте

int k=Vnf2;

for (i=Vnf2;i>0;i--)

// {

// ArrayResize(Buf_DN,Vnf2+1);

// Buf_DN[i]= EquationDirect(Vnf2, VMF2, Vnf1,VMF1,k);

// k--;

// }


 
Вопрос:  как сделать так ,чтобы эксперт мог открыть только одну позицию?

int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }
      }
    }
  }
  return(ko);

}

использую это примерно так:

if(NumberOfOrders(NULL)==0)
            {
            Print("Вошли в цикл");
            
             
                  Print("Покупаю");
                  NumderOrder=OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-50*Point,Ask+50*Point,"1",0,0,Red);
                  Print(GetLastError());

                  }

В результате он все равно открывает несколько подряд не закрыв старую. Не могу понять в чем дело. Помогите плиз.

 
nuan:
if (ot>1      У ордеров  Buy ot=0, мож в этом дело?
 
nuan:
Вы используете функции Игоря Кима. У него есть определения для ордеров и позиций. Ордера - отложенные ордера, а позиции - рыночные.
Вы пытаетесь подсчитать количество отложенных ордеров, а не открытых рыночных позиций.
 
огромное вам спасибо.