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

 
borilunad:

 

Согласен! Хорошо иметь все условия и решать в совокупности!

Если не нужно открывать более одной, ещё использую функцию ЕxistPositions() от КимIV, но это действует, пока позиция не закрыта!

В общем, разобрались! :))) Да и Человек Нам спасибо написал! :)

А вот это пока остаётся непонятным:

MaxZ:

Есть ли такие счета у MT4, где можно открывать лок при отрицательных свободных средствах!? Спрашиваю чисто ради интереса. Спор возник на другом форуме. Мне говорят, что такие счета существуют! :DD

Чтобы не возникло лишних вопрос, приведу пример:

У Вас открыта одна сделка объёмом N. У Вас в терминале после строчки "Свободно:" написано: "-XXX.XX"... Сможете ли Вы открыть лок объёмом N!? На обычном счёте вряд ли... А Мне сказали, что есть ещё какие-то особые счета! :)))))) Не верю в это...

 
MaxZ:

В общем, разобрались! :))) Да и Человек Нам спасибо написал! :)

А вот это пока остаётся непонятным:



 

И я не верю в это! Там что, дядя Коля отдыхает?

Нормально, если счёт в минусе, все позиции закрываются принудительно. Другое дело, если до минуса успел открыть лок, так как маржа за лок не увеличивается, тогда как в том же направлении уже не можешь открыть даже отложку.

 

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

double PPLot;//(в глобальных настройках)
//----------------------------------------------------------------------
//Вспомогательная функция для расчета общей прибыли (убытка) по паре
double Auto_Points()
{
  if(Digits==5 || Digits==3){
    PPLot=10*MarketInfo(Symbol(),MODE_TICKVALUE);
    return(Point*10.0);
  }
  else{
    PPLot=MarketInfo(Symbol(),MODE_TICKVALUE);
    return(Point);
  }
}
//Функция расчета Прибыли/убытка по паре
double SummSymbol()
{
    int n=0;
    double SumSymbol=0;
    int NBuy=0;
    int NSell=0;
    int ttl=OrdersTotal();
    for(int cnt=0;cnt<ttl;cnt++){
        OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
        if(OrderSymbol()==Symbol()){
           n++;
           if(OrderType()==OP_BUY){
              NBuy++;
              SumSymbol+=OrderSwap()+((Bid-OrderOpenPrice())/Auto_Points())*OrderLots()*PPLot;
           }
           if(OrderType()==OP_SELL){
              NSell++;
              SumSymbol+=OrderSwap()+((OrderOpenPrice()-Ask)/Auto_Points())*OrderLots()*PPLot;
           }
        }
    }
    return(SumSymbol);
}

Но проблема в том, что они считают только на той паре, на которой стоит советник, а мне надо указывать для какой пары посчитать прибыль (убыток), например так: SummSymbol(string OrdSmb)

Заменил Symbol() на OrdSmb но рассчеты ведутся неверно для всех пар, кроме пары, на которой стоит советник.

 
Lians:

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

Но проблема в том, что они считают только на той паре, на которой стоит советник, а мне надо указывать для какой пары посчитать прибыль (убыток), например так: SummSymbol(string OrdSmb)

Заменил Symbol() на OrdSmb но рассчеты ведутся неверно для всех пар, кроме пары, на которой стоит советник.


Вот глянь

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в валюте депозита |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
  double p=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            p+=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
 
MaxZ:

Есть ли такие счета у MT4, где можно открывать лок при отрицательных свободных средствах!? Спрашиваю чисто ради интереса. Спор возник на другом форуме. Мне говорят, что такие счета существуют! :DD

Чтобы не возникло лишних вопрос, приведу пример:

У Вас открыта одна сделка объёмом N. У Вас в терминале после строчки "Свободно:" написано: "-XXX.XX"... Сможете ли Вы открыть лок объёмом N!? На обычном счёте вряд ли... А Мне сказали, что есть ещё какие-то особые счета! :)))))) Не верю в это...

Ответ получен... Я в шоке...


borilunad:

И я не верю в это! Там что, дядя Коля отдыхает?

Нормально, если счёт в минусе, все позиции закрываются принудительно. Другое дело, если до минуса успел открыть лок, так как маржа за лок не увеличивается, тогда как в том же направлении уже не можешь открыть даже отложку.

А бывает ведь такое!! А Дядя Коля не отдыхает, Он уже наготове постучаться в дверь! :D

И Вы что-то путаете... Когда только-только свободные средства стали меньше нуля, принудительное закрытие самой убыточной сделки произойдёт только при StopOut'е равном 100%. А при 50%, свободные средства могут болтаться в минусе ещё неопределённый промежуток времени! :)))

 
Привет народ! Скажите где мне нажимать или как щитать чтоб узнать максимальный лот который я могу поставить?
 
MaxZ:

Есть ли такие счета у MT4, где можно открывать лок при отрицательных свободных средствах!? Спрашиваю чисто ради интереса. Спор возник на другом форуме. Мне говорят, что такие счета существуют! :DD

Чтобы не возникло лишних вопрос, приведу пример:

У Вас открыта одна сделка объёмом N. У Вас в терминале после строчки "Свободно:" написано: "-XXX.XX"... Сможете ли Вы открыть лок объёмом N!? На обычном счёте вряд ли... А Мне сказали, что есть ещё какие-то особые счета! :)))))) Не верю в это...

Ответ получен... Я в шоке...

 

Эти "повара" уже не знают, чем заманить "глупеньких Буратино"в!

А с Колей Моржовым встречаюсь только в тестере. В рабочем советнике вставляю свои ограничения, чтобы не допускать крайностей! ;))

 
Beowulf:
Привет народ! Скажите где мне нажимать или как щитать чтоб узнать максимальный лот который я могу поставить?

double MaxLot = MarketInfo(Symbol(), MODE_MAXLOT);
//В следущий раз не ленитесь заглянуть в Доку, а то тут могут послать к телепату!
 
borilunad:

Он уже спрашивал в другой ветке об этом. Ответили... Но он в коде не понимает - сам писал об этом.

Ему скрипт нужен (готовое решение - нажал клавишу (запустил скрипта) - на экране посмотрел).

 

r772ra, надо же, надо бы мне повнимательней относиться к кимовским функциям, спасибо!