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);
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);// команда вернуть из подпрограммы значение "ложь"
}
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 }
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); }
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.
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?
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
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?
Os dígitos de um instrumento comercial - quantos dígitos após o ponto decimal que ele possui.
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 pedidootp=NormalizeDouble(OrderTakeProfit(), dg);// normalize o preço TakeProfit
if (ocp===otp) return(True);
}
retorno(Falso);
}
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?
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?