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) { datetime t; doppio ocp, otp; int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol(); per (i=0; i<k; i++) { se (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { se (OrderSymbol()==sy || sy==") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { se (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { se (t<OrderCloseTime()) { t=OrderCloseTime(); j=i; } } } } } } } // !!!!!!!!?????? QUALCUNO PUÒ SPIEGARE IL SIGNIFICATO DELLE LINEE DI CODICE CHE INIZIANO IN QUESTO PUNTO? se (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Se viene selezionato l'ordine successivo della cronologia di trading dg=MarketInfo(sy, MODE_DIGITS);// la variabile dg accetterà il valore delle cifre della coppia di valute il cui nome è nella variabile sy // di seguito probabilmente ho messo le parentesi in modo errato ma in realtà dovrebbe essere così se (dg==0){// se le cifre sono zero, allora if(StringFind(OrderSymbol(), "JPY")<0){// se viene trovata una sottostringa nel nome del simbolo dell'ordine allora (solo che non è scritto correttamente - la funzione può validare > 1) dg=4;// le cifre prendono valore = 4 } else{// else dg=2;// le cifre prendono valore = 2 } } ocp=NormalizeDouble(OrderClosePrice(), dg);// normalizza il prezzo di chiusura dell'ordine otp=NormalizeDouble(OrderTakeProfit(), dg);// normalizza il prezzo dell'ordine TakeProfit se (ocp==otp) return(True); } return(False);// comando per restituire(false) dalla subroutine }
Significato di uno strumento commerciale - quante cifre dopo il punto decimale ha.
Cioè, se so che le cifre sono 4, allora il codice può essere abbreviato così?
int dg = 4;
............ codice
se (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
ocp=NormalizeDouble(OrderClosePrice(), dg);// normalizza il prezzo di chiusura dell'ordine otp=NormalizeDouble(OrderTakeProfit(), dg);// normalizza il prezzo TakeProfit dell'ordine if (ocp==otp) return(True); }
Non so se è possibile - secondo l'idea dell'autore (beh, mi sembra) questa parte del codice è progettata per determinare automaticamente le cifre - in modo che il codice possa determinare esattamente a quante cifre dopo il punto decimale arrotondare i prezzi. Solo questa parte del codice è fatta inutilmente.
Domanda per il capo di CodeBase. Ho inviato lì 3 pubblicazioni (più 3 in inglese). Uno di essi è stato inviato il 18 luglio e non è stato pubblicato. All'inizio, quando ho inviato i codici lì, sono apparsi entro 3-4 giorni. Ora non è chiaro se i nuovi saranno pubblicati o meno. Vorrei sapere se, per esempio, il materiale è debole e secondo il parere del supervisore non dovrebbe spingerlo in CodeBase, avrò qualche messaggio che non apparirà e quindi, per esempio, sarà rimosso dall'applicazione? Se avessi saputo che non sarebbero stati pubblicati, avrei preparato la pubblicazione in modo diverso, più esteso. C'è un tempo medio di attesa per la pubblicazione?
Ragazzi che sono amichevoli con Pyatra. Per favore guardate il mio Indy per il campionato. Sono bloccato - non riesco a decidere...
Traducendo da 4 a 5 - lì sul forum - il silenzio. Mettete il codice nel ramo - in questa pagina. Descrizione - sul precedente.
Grazie.
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
doppio ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
per (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
se (OrderSymbol()==sy || sy==") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
se (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
// !!!!!!!!?????? QUALCUNO PUÒ SPIEGARE IL SIGNIFICATO DELLE LINEE DI CODICE CHE INIZIANO IN QUESTO PUNTO?
se (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// Se viene selezionato l'ordine successivo della cronologia di trading
dg=MarketInfo(sy, MODE_DIGITS);// la variabile dg accetterà il valore delle cifre della coppia di valute il cui nome è nella variabile sy
// di seguito probabilmente ho messo le parentesi in modo errato ma in realtà dovrebbe essere così
se (dg==0){// se le cifre sono zero, allora
if(StringFind(OrderSymbol(), "JPY")<0){// se viene trovata una sottostringa nel nome del simbolo dell'ordine allora (solo che non è scritto correttamente - la funzione può validare > 1)
dg=4;// le cifre prendono valore = 4
}
else{// else
dg=2;// le cifre prendono valore = 2
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);// normalizza il prezzo di chiusura dell'ordine
otp=NormalizeDouble(OrderTakeProfit(), dg);// normalizza il prezzo dell'ordine TakeProfit
se (ocp==otp) return(True);
}
return(False);// comando per restituire(false) dalla subroutine
}
grazie, cosa sono le cifre?
Le cifre di uno strumento di trading - quante cifre dopo il punto decimale ha.
Significato di uno strumento commerciale - quante cifre dopo il punto decimale ha.
Cioè, se so che le cifre sono 4, allora il codice può essere abbreviato così?
int dg = 4;
............ codice
se (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
ocp=NormalizeDouble(OrderClosePrice(), dg);// normalizza il prezzo di chiusura dell'ordineotp=NormalizeDouble(OrderTakeProfit(), dg);// normalizza il prezzo TakeProfit dell'ordine
if (ocp==otp) return(True);
}
return(False);
}
Potete dirmi se esiste un indicatore che calcola il numero totale di ordini aperti per tutte le coppie coinvolte nel processo di trading?