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

Роман
7938
Роман  

Пацаны, кто с Пятёрой - дружен. Гляньте, плз, мой индик к чемпу. Затык - никак не могу решить...

Перевод с 4-ки на пятёрку - там на форуме - тишина. Выложил код в ветвь - на эту страницу. Описание - на предыдущей.

Благодарю.

anton
191
anton  
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {                     // !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
Владимир Тезис
4266
Владимир Тезис  
okvseok:

bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
 datetime t;
 double ocp, otp;
 int dg, i, j=-1, k=OrdersHistoryTotal();

 if (sy=="0") sy=Symbol();
 for (i=0; i<k; i++) {
 if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
 if (OrderSymbol()==sy || sy=="") {
 if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
 if (op<0 || OrderType()==op) {
 if (mn<0 || OrderMagicNumber()==mn) {
 if (t<OrderCloseTime()) {
 t=OrderCloseTime();
 j=i;
 }
 }
 }
 }
 }
 }
 }
 // !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?
 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Если очередной ордер истории торгов выбран, то
 dg=MarketInfo(sy, MODE_DIGITS);// переменная dg принимет значение дигитса по валютной паре, имя которой лежит в переменной sy
 // далее я возможно не верно расставил приоритет скобок, но по сути должно быть так:
 if (dg==0){// если дигитс равен нулю, то
 if(StringFind(OrderSymbol(),"JPY")<0){// если в имени инструмента ордера найдена подстрока то (только это не правильно написано - функция может верноуть значение > 1)
 dg=4;// дигитс принимает значение = 4
 }
 else{// иначе
 dg=2;// дигитс принимает значение = 2
 }
 }
 ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордера
 otp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордера
 if (ocp==otp) return(True);
 }
 return(False);// команда вернуть из подпрограммы значение "ложь"
 }
anton
191
anton  
drknn:

bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
// !!!!!!!!?????? ХОТЬ КТО-ТО МОЖЕТ ОБЪЯСНИТЬ ЗНАЧЕНИЕ СТРОК КОДА, КОТОРЫЕ НАЧИНАЮТСЯ С ЭТОГО МЕСТА?
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Если очередной ордер истории торгов выбран, то
dg=MarketInfo(sy, MODE_DIGITS);// переменная dg принимет значение дигитса по валютной паре, имя которой лежит в переменной sy
// далее я возможно не верно расставил приоритет скобок, но по сути должно быть так:
if (dg==0){// если дигитс равен нулю, то
if(StringFind(OrderSymbol(),"JPY")<0){// если в имени инструмента ордера найдена подстрока то (только это не правильно написано - функция может верноуть значение > 1)
dg=4;// дигитс принимает значение = 4
}
else{// иначе
dg=2;// дигитс принимает значение = 2
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордера
otp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордера
if (ocp==otp) return(True);
}
return(False);// команда вернуть из подпрограммы значение "ложь"
}
спасибо, а что такое дигитс?
Владимир Тезис
4266
Владимир Тезис  
okvseok:
спасибо, а что такое дигитс?

Знаковость торгового инструмента - сколько у него там циферок после запятой.
anton
191
anton  
drknn:

Знаковость торгового инструмента - сколько у него там циферок после запятой.

то есть, если я знаю, что цифр 4, то код можно сократить так?:

int dg = 4;

............код

if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {

ocp=NormalizeDouble(OrderClosePrice(), dg);// нормализация цены закрытия ордера
otp=NormalizeDouble(OrderTakeProfit(), dg);// нормализация цены ТейкПрофита ордера
if (ocp==otp) return(True);
}

return(False);

}

Владимир Тезис
4266
Владимир Тезис  
Не знаю можно ли - по-замыслу автора (ну, мне так видится) этот участок кода предназначен для автоматического определения дигитса - ну чтоб код мог определиться точно, до скольких цифр после запятой нужно вести округление цен. Только участок этот бестолково сделан.
Юсуфходжа
3534
Юсуфходжа  
Скажите, пожалуйста, есть-ли индикатор, считающий общее количество открытых ордеров по всем задействованным, в процесс торговли, парам?
Paladin80
658
Paladin80  
yosuf:
Скажите, пожалуйста, есть-ли индикатор, считающий общее количество открытых ордеров по всем задействованным, в процесс торговли, парам?
Неа, нету. Проще простой советник сделать который подсчитывает кол-во открытых позиций.
Paladin80
658
Paladin80  
Вопрос к начальнику CodeBase. Я оправил туда 3 публикации (плюс 3 на английском). Одна из них была отправлена 18 июля и не опубликована. В начале, когда высылал туда коды, они появлялись в течение 3-4 дней. Сейчас не понятно будут ли новые опубликованы или нет. Хотелось бы узнать если, например материал слабоват и по мнению начальника не стоит их в CodeBase пихать, то получу ли я какое-то сообщение, что они не появятся, потом например будут удалены из заявки? Если бы я узнал что они не опубликуются, то я подготовил бы публикацию по-другому, более расширенно. Есть ли какое-то среднее время на ожидание публикации?