Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 574
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Bir bekar veya düşüş eğilimi sinyalleri üzerine emir açma fikri, alım / satım için yalnızca bir işlem ve bekleyen bir emir için bir işlem olacak şekilde nasıl yapılır, her bir onay işaretini açarım Ticaret. Sorunu çözmeye yardımcı olun.
Bunu da yapabilirsiniz: burada aralığın her mumu için eşleşmeler kaydedilir. Önceki versiyonda, eşleşmeler yalnızca bir mum için yazılmıştır - yani, bununla eşleşen için artık bir eşleşme yazılmamıştır.
Artem, teşekkürler. Bunu halledeceğim.
Yüksek değerler yuvarlanabilir, örneğin 1,23456 değeri 1,2346'ya yuvarlanır
Yuvarlama açıktır. Ayrıca, Yüksek değerlerin eşit kabul edildiği sapma değerini ayarlamanın mümkün olacağı ayarlara bir değişken ekledim. Ona ihtiyaç var çünkü. 4 basamaklı teklifler için genellikle böyle bir sorun yoktur, ancak beş basamaklı bir teklif için sonsuz sayıda tam eşleşme arayabilirsiniz.
Artem, teşekkürler. Bunu halledeceğim.
Yuvarlama açıktır. Ayrıca, Yüksek değerlerin eşit kabul edildiği sapma değerini ayarlamanın mümkün olacağı ayarlara bir değişken ekledim. Ona ihtiyaç var çünkü. 4 basamaklı teklifler için genellikle böyle bir sorun yoktur, ancak beş basamaklı bir teklif için sonsuz sayıda tam eşleşme arayabilirsiniz.
Benim için zevkti. İkinci versiyonda bir yanlışlık yaptı. İlk versiyonda, döngü indeksinden bir sonraki mumdan başlayarak eşleşmeler arandığından, iki uç mumu karşılaştırmak için ana döngünün geçişi mum sayısı eksi bir idi. Şimdi, ikinci versiyonda, mumların her biri için tüm aralıkta eşleşmeler aranır, bu nedenle satırda
arama çubuklarının sayısını değiştirmeniz gerekir.
Yeni bir pozisyon açmadan veya bekleyen yeni bir emir vermeden önce verilen emirlerin sayısını ve açık pozisyonların sayısını kontrol edin.
yani, işlem koşullarındakiemir ve pozisyon sayısını kontrol etmek için bir koşul eklemek gerekli mi?
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l3&&o3>c1&&o4>c1&&o3>st koşul
if (OrdersTotal()==0) //ikinci koşul
OrderSend(Symbol(), OP_BUY,Lot,o,10,l1,0); } ....................................ve böylece her işlem için?
Ve açık pozisyonların sayısını hangi fonksiyon sayar?
sorunu çözmüş görünüyor:
if (Saat()>=0&&Saat()<23){
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l3&&o3>l){&o4>
if (KonumlarToplam()<=1)
OrderSend(Symbol(), OP_BUY,Lot,o,10,l1,0); } //Satın Al'ı açar
if (o4>c4&&o3>c3&&l2>l1&&c2<c1&&o2>c2&&o1<c1&&c1>o2&&h1>h2||o2>c1&&h2>h1&&h1<o2&&o1<c1&&l2>l3&&o3>l){&o4>
if (PositionsTotal()==1&&OrderType()==0)
OrderSend(Symbol(), OP_SELLSTOP,Lot,l2,10,h2,0);} //SellStop bekleyen emir
if (o4<c4&&o3<c3&&h2<h1&&c2>c1&&o2<c2&&o1>c1&&c1<o2&&l1<l2||o2<c1&&l2<l1&&l1>o2&&o1>c1&&h2<h1&&o3<h1&&o3<h1&&o3
if (KonumlarToplam()<=1)
OrderSend(Symbol(),OP_SELL,Lot,o,10,h1,0); } //Sat'ı açar
if (o4<c4&&o3<c3&&h2<h1&&c2>c1&&o2<c2&&o1>c1&&c1<o2&&l1<l2||o2<c1&&l2<l1&&l1>o2&&o1>c1&&h2<h1&&o3<h1&&o3<h1&&o3
if (PositionsTotal()==1&&OrderType()==1)
OrderSend(Symbol(), OP_BUYSTOP,Lot,h2,10,l2,0);} //BuyStop bekleyen sipariş
}
//+------------------------------------------- --------------------+
// Toplam açık pozisyon sayısını döndüren fonksiyon |
// |
//+------------------------------------------- --------------------+
int KonumlarToplam() {
int konum = 0;
for (int i=0; i<SiparişlerToplam(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
konum++;
}
dönüş(konum);
}
//+------------------------------------------- --------------------+
Bunu da yapabilirsiniz: burada aralığın her mumu için eşleşmeler kaydedilir. Önceki versiyonda, eşleşmeler yalnızca bir mum için yazılmıştır - yani, bununla eşleşen için artık bir eşleşme yazılmamıştır.
İyi. Ancak anladığım kadarıyla, 2. mumun yüksekliği 7. mumun yüksekliğiyle eşleşirse, o zaman iki eşleşme bulunacaktır: 2 <=> 7, 7 <=> 2. Ters çiftleri hesaba katmaya ne dersiniz, ancak yalnızca ek bir döngü olmadan?
Sorunu iç içe for:))) döngülerini kullanmadan tek geçişte çözmek zayıf mı?
İyi. Ancak anladığım kadarıyla, 2. mumun yüksekliği 7. mumun yüksekliğiyle eşleşirse, o zaman iki eşleşme bulunacaktır: 2 <=> 7, 7 <=> 2. Ters çiftleri hesaba katmaya ne dersiniz, ancak yalnızca ek bir döngü olmadan?
Sorunu iç içe for:))) döngülerini kullanmadan tek geçişte çözmek zayıf mı?
:) Zayıf olmama gerek yok ;) Tabii ki tek döngüde çözülebileceğini düşünüyorum ama daha uzun düşünemeyecek kadar tembeldim - hemen aklıma geldikçe yaptım.
Doğal olarak, burada tüm eşleştirilmiş ve daha fazla mum, her bir mumun eşleşme verilerine kaydedilir. Bu yüzden birbirlerine çapraz referans veriyorlar. Ben sadece seçenekler sunuyorum, gerçekten ne işe yaradıklarını bilmiyorum.
Ve sonra hesaplamaları optimize etme problemlerini çözebilirsin, ama benim buna ihtiyacım yok.
Ya her mum ve tüm eşleşmeler için tam olarak verilere ihtiyacınız varsa ve aniden, aniden, aniden ... bu sadece ....
Genel olarak - zaman ve arzu yoktur. Ve böylece kendi kodlarımı yazmak yerine vakit harcadım.
ZY, belki de istenen giriş parametresini bilerek Kohonen'in yöntemlerini bağlamaya değer.
Genel olarak - zaman ve arzu yoktur. Ve böylece kendi kodlarımı yazmak yerine vakit harcadım.
Üzgünüm, çok üzgünüm.
Benim için zevkti. İkinci versiyonda bir yanlışlık yaptı. İlk versiyonda, döngü indeksinden bir sonraki mumdan başlayarak eşleşmeler arandığından, iki uç mumu karşılaştırmak için ana döngünün geçişi mum sayısı eksi bir idi. Şimdi, ikinci versiyonda, mumların her biri için tüm aralıkta eşleşmeler aranır, bu nedenle satırda
arama çubuklarının sayısını değiştirmeniz gerekir.
Lütfen bana şu satırların anlamını söyle:
girdi int Search_Period=10; // Kopyalanan mum sayısı
int searchPeriod=(Search_Period<1)?1:Search_Period; // "?", ":" sembolleri ne anlama geliyor?
giriş int Delta=2; // Tolerans noktası sayısı
int delta=(Delta<0)?0:Delta; // "?", ":" sembolleri ne anlama geliyor?
Lütfen bana şu satırların anlamını söyle:
girdi int Search_Period=10; // Kopyalanan mum sayısı
int searchPeriod=(Search_Period<1)?1:Search_Period; // "?", ":" sembolleri ne anlama geliyor?
giriş int Delta=2; // Tolerans noktası sayısı
int delta=(Delta<0)?0:Delta; // "?", ":" sembolleri ne anlama geliyor?
Yardımdan:
Koşullu operatör ?:
Üçlü operatörün genel formu şöyle görünür:
ifade 1 ? ifade 2 : ifade 3
İlk işlenen olarak - "ifade1" - sonucu bir bool değeri olan herhangi bir ifade kullanılabilir. Sonuç true ise, ikinci işlenen tarafından belirtilen ifade, yani "ifade2" yürütülür.
İlk işlenen false ise, üçüncü işlenen "ifade3" yürütülür. İkinci ve üçüncü işlenenler, yani "ifade2" ve "ifade3", aynı türde değerler döndürmeli ve void türünde olmamalıdır. Koşullu ifadenin yürütülmesinin sonucu, "ifade1"in sonucuna bağlı olarak "ifade2"nin veya "ifade3"ün sonucudur.
//--- günlük aralıktaki açılış ve kapanış fiyatları arasındaki farkı normalleştirin
double true_range = (Yüksek==Düşük)? 0 :(Yakın-Açık)/(Yüksek-Düşük);
Bu gösterim aşağıdakine eşdeğerdir
çift true_range;
if (Yüksek==Düşük)true_range= 0 ; // yüksek ve düşük eşitse
else true_range=(Kapalı-Aç)/(Yüksek-Düşük); // aralık sıfır değilse