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) { tarihsaat t; çift işlem, 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()==dk) { if (t<SiparişKapatZamanı()) { t=SiparişKapatZamanı(); j=i; } } } } } } } // !!!!!!!!!!!!?????? BURADA BAŞLAYAN KOD SATIRLARININ ANLAMINI AÇIKLAYABİLİR Mİ? if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// İşlem geçmişinin bir sonraki sırası seçilirse, o zaman dg=MarketInfo(sy, MODE_DIGITS);// dg değişkeni, adı sy değişkeninde olan döviz çifti için rakamın değerini alacaktır. // sonra, parantezlere doğru bir şekilde öncelik vermeyebilirim, ama aslında şöyle olmalı: if (dg==0){// rakamlar sıfır ise, o zaman if(StringFind(OrderSymbol(),"JPY")<0){// siparişin aracının adında bir alt dize bulunursa (yalnızca bu doğru yazılmaz - işlev > 1 değeri döndürebilir) dg=4;// basamaklar = 4 değerini alır } başka{// başka dg=2;// basamaklar = 2 değerini alır } } ocp=NormalizeDouble(OrderClosePrice(), dg);// emir kapanış fiyatının normalleştirilmesi otp=NormalizeDouble(OrderTakeProfit(), dg);// siparişin normalleştirilmesi TakeProfit fiyatı if (ocp==otp) dönüş(Doğru); } return(False);// alt programdan "false" değerini döndürme komutu }
Mümkün olup olmadığını bilmiyorum - yazarın amacına göre (peki, ben öyle görüyorum) bu kod bölümü rakamları otomatik olarak belirlemek için tasarlanmıştır - yani, kod tam olarak ondalık basamaktan sonra kaç basamak belirleyebilir nokta fiyatları yuvarlamak gereklidir. Sadece bu bölüm aptalca yapılmış.
CodeBase başkanına soru. Oraya 3 yayın gönderdim (artı 3 İngilizce). Bunlardan biri 18 Temmuz'da gönderildi ve yayınlanmadı. İlk başta kodları oraya gönderdiğimde 3-4 gün içinde çıkıyordu. Şimdi yenilerinin yayınlanıp yayınlanmayacağı belli değil. Örneğin, materyalin oldukça zayıf olup olmadığını ve patronun görüşüne göre onları CodeBase'e sokmaya değmeyeceğini bilmek istiyorum, görünmeyeceklerine dair bir tür mesaj alacak mıyım, o zaman, örneğin , uygulamadan kaldırılacaklar mı? Yayınlanmayacaklarını bilseydim, yayını daha farklı, daha kapsamlı hazırlardım. Yayın için ortalama bir bekleme süresi var mı?
Beşli ile birlikte olan çocuklar arkadaş canlısıdır. Bak, lütfen şampiyonluk göstergesim. Sıkıştım - karar veremiyorum ...
4'ten beşe çeviri - orada forumda - sessizlik. Kodu şubeye gönderdim - bu sayfada . Açıklama - bir öncekinde.
Sayesinde.
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
tarihsaat t;
çift işlem, 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()==dk) {
if (t<SiparişKapatZamanı()) {
t=SiparişKapatZamanı();
j=i;
}
}
}
}
}
}
}
// !!!!!!!!!!!!?????? BURADA BAŞLAYAN KOD SATIRLARININ ANLAMINI AÇIKLAYABİLİR Mİ?
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {// İşlem geçmişinin bir sonraki sırası seçilirse, o zaman
dg=MarketInfo(sy, MODE_DIGITS);// dg değişkeni, adı sy değişkeninde olan döviz çifti için rakamın değerini alacaktır.
// sonra, parantezlere doğru bir şekilde öncelik vermeyebilirim, ama aslında şöyle olmalı:
if (dg==0){// rakamlar sıfır ise, o zaman
if(StringFind(OrderSymbol(),"JPY")<0){// siparişin aracının adında bir alt dize bulunursa (yalnızca bu doğru yazılmaz - işlev > 1 değeri döndürebilir)
dg=4;// basamaklar = 4 değerini alır
}
başka{// başka
dg=2;// basamaklar = 2 değerini alır
}
}
ocp=NormalizeDouble(OrderClosePrice(), dg);// emir kapanış fiyatının normalleştirilmesi
otp=NormalizeDouble(OrderTakeProfit(), dg);// siparişin normalleştirilmesi TakeProfit fiyatı
if (ocp==otp) dönüş(Doğru);
}
return(False);// alt programdan "false" değerini döndürme komutu
}
teşekkürler, rakam nedir?
Bir ticaret enstrümanının önemi - ondalık noktasından sonra kaç tane sayıya sahip olduğu.
Bir ticaret enstrümanının önemi - ondalık noktasından sonra kaç tane sayıya sahip olduğu.
yani, 4 basamak olduğunu biliyorsam, kod şu şekilde kısaltılabilir mi?:
int dg = 4;
................kod
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
ocp=NormalizeDouble(OrderClosePrice(), dg);// emir kapanış fiyatının normalleştirilmesiotp=NormalizeDouble(OrderTakeProfit(), dg);// siparişin normalleştirilmesi TakeProfit fiyatı
if (ocp==otp) dönüş(Doğru);
}
dönüş(yanlış);
}
Söyleyin lütfen, işlem sürecine dahil olan tüm çiftler için toplam açık sipariş sayısını sayan bir gösterge var mı?