[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 298

 
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);
 
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);// команда вернуть из подпрограммы значение "ложь"
 }
 
drknn:

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

se (sy=="0") sy=Símbolo();
para (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy ||| sy==") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (op<0 || OrderType()==op) {
se (mn<0 || OrderMagicNumber()==mn) {
se (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
// !!!!!!!!?????? ALGUÉM PODE EXPLICAR O SIGNIFICADO DAS LINHAS DE CÓDIGO QUE COMEÇAM NESTE LUGAR?
se (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Se a próxima ordem do histórico comercial for selecionada
dg=MarketInfo(sy, MODE_DIGITS);// a variável dg aceitará o valor dos dígitos pelo par de moedas cujo nome está na variável sy
// Talvez eu tenha colocado os parênteses errado, mas na verdade deveria ser assim
se (dg==0){// se os dígitos forem zero, então
if(StringFind(OrderSymbol(), "JPY")<0){// se um substrato for encontrado no nome do símbolo do pedido então (só que não está escrito corretamente - a função pode validar > 1)
dg=4;// os dígitos tomam valor = 4
}
senão{/// senão
dg=2;// os dígitos tomam valor = 2
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);// normalize o preço de fechamento do pedido
otp=NormalizeDouble(OrderTakeProfit(), dg);// normalize o preço TakeProfit do pedido
if (ocp==otp) return(True);
}
retornar(Falso);// comando para retornar(falso) da sub-rotina
}
obrigado, o que são os dígitos?
 
okvseok:
obrigado, o que são os dígitos?

Os dígitos de um instrumento comercial - quantos dígitos após o ponto decimal que ele possui.
 
drknn:

Significado de um instrumento comercial - quantos dígitos após o ponto decimal que ele possui.

Ou seja, se eu souber que os dígitos são 4, o código pode ser abreviado assim?

int dg = 4;

............ código

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

ocp=NormalizeDouble(OrderClosePrice(), dg);// normalize o preço de fechamento do pedido
otp=NormalizeDouble(OrderTakeProfit(), dg);// normalize o preço TakeProfit
if (ocp===otp) return(True);
}

retorno(Falso);

}

 
Eu não sei se é possível - de acordo com a idéia do autor (bem, me parece) esta parte do código é projetada para determinar automaticamente os dígitos - para que o código possa determinar exatamente quantos dígitos após o ponto decimal para arredondar os preços. Somente esta parte do código é feita inutilmente.
 
Você pode me dizer se existe um indicador que calcula o número total de ordens abertas para todos os pares envolvidos no processo de negociação?
 
yosuf:
Você pode me dizer se existe um indicador que calcula o número total de ordens abertas para todos os pares envolvidos no processo de negociação?
Não, não. É mais fácil fazer um simples Expert Advisor que calcula o número de posições em aberto.
 
Pergunta para o chefe da CodeBase. Enviei 3 publicações para lá (mais 3 em inglês). Uma delas foi enviada em 18 de julho e ainda não foi publicada. No início, quando eu enviei os códigos para lá, eles apareceram dentro de 3-4 dias. Agora não está claro se novos serão publicados ou não. Eu gostaria de saber se, por exemplo, o material é fraco e na opinião do supervisor eles não devem empurrá-los para dentro do CodeBase, eu receberei alguma mensagem de que eles não aparecerão e então, por exemplo, eles serão removidos da aplicação? Se eu soubesse que não seriam publicados, prepararia a publicação de forma diferente, mais extensiva. Há algum tempo médio de espera para publicação?
 
paladin80:
Pergunta para o chefe da CodeBase. Enviei 3 publicações para lá (mais 3 em inglês). Uma delas foi enviada em 18 de julho e ainda não foi publicada. No início, quando eu enviei os códigos para lá, eles apareceram dentro de 3-4 dias. Agora não está claro se novos serão publicados ou não. Eu gostaria de saber se, por exemplo, o material é fraco e na opinião do supervisor eles não devem empurrá-los para dentro do CodeBase, eu receberei alguma mensagem de que eles não aparecerão e então, por exemplo, eles serão removidos da aplicação? Se eu soubesse que não seriam publicados, prepararia a publicação de forma diferente, mais extensiva. Há algum tempo médio de espera para publicação?
Nos anais, inequivocamente!
Razão: