Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 574

 
Anton Balakirew :
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.
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.
 
Artyom Trishkin :

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.

pako :

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.

 
Andrey Koldorkin :

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

 for ( int i= 0 ; i<copy_bars- 1 ; i++) {                             // цикл по скопированным данным от начала до "на один меньше размера массива"

arama çubuklarının sayısını değiştirmeniz gerekir.

 for ( int i= 0 ; i<copy_bars; i++) {                             // цикл по скопированным данным от начала до конца диапазона
 
Artyom Trishkin :
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);

}

//+------------------------------------------- --------------------+

 
Artyom Trishkin :

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ı?

 
Vasiliy Sokolov :

İ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.

 
Artyom Trishkin :

Genel olarak - zaman ve arzu yoktur. Ve böylece kendi kodlarımı yazmak yerine vakit harcadım.

Üzgünüm, çok üzgünüm.
 
Vasiliy Sokolov :
Üzgünüm, çok üzgünüm.
Evet, sorun ilginç, ama ne yazık ki zamanım yok.
 
Artyom Trishkin :

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?

 
Andrey Koldorkin :

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?

 // строку int searchPeriod=(Search_Period<1)?1:Search_Period;
// можно расписать так:

input int Search_Period= 10 ; // Количество копируемых свечей ... эту строку вы видите в настройках
int searchPeriod;           // Сюда будем записывать входной параметр
if (Search_Period< 1 ) searchPeriod= 1 ; // Если во входном параметре ввели ноль или меньше нуля, то параметр будет равен единице
else searchPeriod=Search_Period;     // иначе примем входной параметр

// соответственно и строку int delta=(Delta<0)?0:Delta;
// можно расписать точно так же

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

Neden: