Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 246

 
Valeriy Yastremskiy :

Teşekkür ederim. Deneyeceğim. İşe yarayacağından emin değilim)

 
Açık ve kapalı siparişlerim var.
1. Bir sipariş açarken, dizi meşgul değilse (muhtemelen = 0) Biletini diziye yazmanız gerekir, böylece numaralandırmada ondan bir rapor tutabilirsiniz.
2. Emir kapatıldıktan sonra (kapatılmayabilir), kapatılan emirlerin kar raporu başlatılır. Belirli bir kâra ulaşıldığında, yani: kâr tutarı + aynı kâr >= herkesten önce veya maksimum zararla (henüz karar verilmemiş) açılan bir açık emrin (emri 123 diyelim) kârı.
3. Aşağıdaki koşullar karşılanırsa: "kar miktarı + aynı kar >= açık bir emrin karı (123 numaralı emri diyelim)", 123 numaralı emir kapatılır ve dizi sıfırlanır (muhtemelen = 0 olur).

1. Bir danışman verdiğinizde, dikkate almak isteyip istemediğiniz açık ve kapalı emirleriniz var mı ve danışmanın işi her seferinde açık emir olmadan başlıyor ve daha önce kapatılmış emirleri hesaba katmıyor mu?

2. Hiç belli değil. Birden fazla emriniz var, bir emri kapatırken, kâr toplam toplam olarak kabul edilir ve kapatılan emrin kârına ilişkin veriler vardır. Ve kapanmamış siparişler için kar verileri var, hesaplanabiliyor. Neyle kıyaslanır. Örneğin, 3 sipariş var. 1 kapalı, 2 kapalı, 3 açık. Pr1, Pr2 ve hesaplanan Pr3 karları vardır. Neyi neye benzetiyoruz. Aynı zamanda, kapatılmamış bir sipariş için komisyon ve takasları dikkate almadığımızı anlıyoruz.

3. Hiç net değil, diziyi biletlerle sıfırlarsanız, o zaman nasıl? Piyasa emirleri piyasada kalacaktır. Onları nasıl kapatacaksınız?

 
Oksana_Timakova :
Soru: Çubuğun Yüksek değeri nasıl korunur   a   ve düşük çubuk   b   onları bir gösterge hattı ile bağlamak için?
Bunun için iki ek dizi daha oluşturmam gerekir mi?
Evet. arabellek dizisi.
 
Valeriy Yastremskiy :
Evet. arabellek dizisi.
Yani, ZigZag'da olduğu gibi çıkıyor. Ve ikisinin çizmemesi için bazı özel işlevler uygulamanız mı gerekiyor?
 
Oksana_Timakova :
Yani, ZigZag'da olduğu gibi çıkıyor. Ve ikisinin çizmemesi için bazı özel işlevler uygulamanız mı gerekiyor?
Hat tipi aynı. Ne hakkında çizmeyeceklerini anlamadım. 2 arabellek dizisi bildiriyorsunuz. Özellikleri ayarlayın. Bu çizgi tipi, renk kalınlığıdır. Ve ilk yüksek fiyatları ve ikinci düşük fiyatları zaman serisinden çubukla atayın.
 
Valeriy Yastremskiy :

1. Bir danışman verdiğinizde, dikkate almak isteyip istemediğiniz açık ve kapalı emirleriniz var mı ve danışmanın işi her seferinde açık emir olmadan başlıyor ve daha önce kapatılmış emirleri hesaba katmıyor mu?

2. Hiç belli değil. Birden fazla emriniz var, bir emri kapatırken, kâr toplam toplam olarak kabul edilir ve kapatılan emrin kârına ilişkin veriler vardır. Ve kapanmamış siparişler için kar verileri var, hesaplanabiliyor. Neyle kıyaslanır. Örneğin, 3 sipariş var. 1 kapalı, 2 kapalı, 3 açık. Pr1, Pr2 ve hesaplanan Pr3 karları vardır. Neyi neye benzetiyoruz. Aynı zamanda, kapatılmamış bir sipariş için komisyon ve takasları dikkate almadığımızı anlıyoruz.

3. Hiç net değil, diziyi biletlerle sıfırlarsanız, o zaman nasıl? Piyasa emirleri piyasada kalacaktır. Onları nasıl kapatacaksınız?

Tekrar )))

Açık siparişler var, diyelim ki 5 adet, hepsi olumsuz. Bunlardan ilki (123) çok 0,5'ti, ancak kırmızıya döndü. 0.1 lot ile yeni bir emir (456) açın, bu emrin biletini açın ve açılışta diziye yazın. Sonra aynı partiye sahip başka bir sipariş dizisi gelir, olumlu bir şey, olumsuz bir şey. Ama sipariş 123 negatif ve açık kalır. 456. siparişten sonra tüm kapatılan siparişlerin karı (aynı zamanda kapalıdır) 123. sıranın kârından büyük olduğu anda, ilk ve hala açık olduğu için 123. siparişi buluruz, kapatın ve diziyi sıfırlayın.

Birkaç açık sipariş var, belirli koşullar altında bir tane daha açıyoruz. Diyelim ki sipariş toplamı>=5

sipariş gönderimi (bilet 456)

sipariş başarıyla açılırsa

dizi boşsa

bilet 456 diziye yazılır

sipariş 456 kârla kapatıldı (artı veya eksi ne olursa olsun), ardından diğer siparişler açıldı ve kapatıldı, ancak bilet 456 dizide saklandı.


CalCloseProfi () - fonksiyon kapatılan siparişlerin karını kontrol eder

Sihirli, satın al, sat, bilet 456 (diziden alınan) ve üzeri siparişten başlayarak kapalı siparişleri yineler ve karlarını hesaplar


FirstOrder() - fonksiyon açık emirler arasında ilk açılışı arar (teoride 123'ü bulmalıdır))

eğer kar CalCloseProfi > FirstOrder ise, o zaman 123. sırayı kapatıp diziyi sıfırlıyoruz, böylece daha sonra koşullar sağlanırsa, oraya tekrar bir bilet yazabilir.


başka nasıl anlatılır bilmiyorum)

Bu fonksiyonların hangi koşullarda yürütüleceğini yazabilirim ama dizilere rastlamadım.
Açılırken OrederTicket gibi bir diziye bilgiyi nasıl sokacağımıza ve daha sonra nasıl alacağımıza dair bir örneğe ihtiyacımız var.
Bir Double dizisi kullanmanız, bir kısmına sihir yazmanız önerilir, böylece aynı hesap üzerinde farklı ayarlarla çalışırken karışmazlar (veya belki gerekli değildir, dizilerde güçlü değildir)

Şimdiden teşekkürler

 
makssub :

Tekrar )))

Açık siparişler var, diyelim ki 5 adet, hepsi olumsuz. Bunlardan ilki (123) çok 0,5'ti, ancak kırmızıya döndü. 0.1 lot ile yeni bir emir (456) açın, bu emrin biletini açın ve açılışta diziye yazın. Sonra aynı partiye sahip başka bir sipariş dizisi gelir, olumlu bir şey, olumsuz bir şey. Ama sipariş 123 negatif ve açık kalır. 456. siparişten sonra tüm kapatılan siparişlerin karı (aynı zamanda kapalıdır) 123. sıranın kârından büyük olduğu anda, ilk ve hala açık olduğu için 123. siparişi buluruz, kapatın ve diziyi sıfırlayın.

Birkaç açık sipariş var, belirli koşullar altında bir tane daha açıyoruz. Diyelim ki sipariş toplamı>=5

sipariş gönderimi (bilet 456)

sipariş başarıyla açılırsa

dizi boşsa

bilet 456 diziye yazılır

sipariş 456 kârla kapatıldı (artı veya eksi ne olursa olsun), ardından diğer siparişler açıldı ve kapatıldı, ancak bilet 456 dizide saklandı.


CalCloseProfi () - işlev, kapatılan siparişlerin karını kontrol eder

Sihirli, satın al, sat, bilet 456 (diziden alınan) ve üzeri siparişten başlayarak kapalı siparişleri yineler ve karlarını hesaplar


FirstOrder() - fonksiyon açık emirler arasında ilk açılışı arar (teoride 123'ü bulmalıdır))

eğer kar CalCloseProfi > FirstOrder ise, o zaman 123. sırayı kapatıp diziyi sıfırlıyoruz, böylece daha sonra koşullar sağlanırsa, oraya tekrar bir bilet yazabilir.


başka nasıl anlatılır bilmiyorum)

Bu fonksiyonların hangi koşullarda yürütüleceğini yazabilirim ama dizilere rastlamadım.
Açılırken OrederTicket gibi bir diziye bilgiyi nasıl sokacağımıza ve daha sonra nasıl alacağımıza dair bir örneğe ihtiyacımız var.
Bir Double dizisi kullanmanız, bir kısmına sihir yazmanız önerilir, böylece aynı hesap üzerinde farklı ayarlarla çalışırken karışmazlar (veya belki gerekli değildir, dizilerde güçlü değildir)

Şimdiden teşekkürler

İşlevlerin yürütülmesi için koşulları yazın.
 

Tünaydın. Bana neden hata verdiğini söyle: dizi '.......' içinde aralık dışı (152,41)


bilet = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
eğer (bilet<1)
{
Print("Satışa açılma hatası");
}
if (bilet >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
{
FindTicket();
Print(" Bilet sipariş: ", FindTicket(), " Dizi sipariş: ", SaveTick[1], " Array Magic: ", SaveTick[0]);
}

int FindTicket()
{
int eski bilet;
int tik=0;
bilet=0;
ArrayResize( SaveTick, 2 );
for(int cnt = SiparişlerToplam ()-1; cnt>=0; cnt--)
{
if(OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (eski bilet > bilet)
{
bilet = eski bilet;
tick = OrderTicket();
SaveTick[1] = tik;
SaveTick[0] = Büyü;
}
}
}
}
dönüş(tik);
}

 
makssub # :

Tünaydın. Bana neden hata verdiğini söyle: dizi '.......' içinde aralık dışı (152,41)


ticket = OrderSend ( Symbol (), OP_SELL, lastlot, Bid, Slippage, 0 , tpl, Magic, 0 , Red);
             if (ticket < 1 )
            {
               Print ( "Ошибка открытия на продажу" );
            }
               if (ticket > 1 && SaveTick[ 1 ] <= 0 && SaveTick[ 0 ] == Magic )
            {
               FindTicket() ;
               Print ( " Тикет ордера: " , FindTicket(), " Массив ордера: " , SaveTick[ 1 ], " Магик массива: " , SaveTick[ 0 ]);
    }

int FindTicket()
   {
   int oldticket;
   int tick= 0 ;
   ticket= 0 ;
   ArrayResize ( SaveTick, 2 );
   for ( int cnt = OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
      {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
         {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
            {
            oldticket = OrderTicket();
             if (oldticket > ticket)
               {
               ticket = oldticket;
               tick = OrderTicket();
               SaveTick[ 1 ] = tick;
               SaveTick[ 0 ] = Magic;
               }
            }
         }
      }
   return (tick);
  }              

Kodu doğru şekilde yapıştırın, alt S veya simgeye göre ipucu kodu.

SaveTick dizisine neden ihtiyacınız var?

Yalnızca 2 dizi öğesi kullanıyorsunuz. Bir fonksiyonda bildirirseniz, bunları global veya statik değişkenlerle değiştirin.

2 değişken için bir dizi kullanmak mantıklı değil.

Ve görünüşe göre, SaveTick dizisinin boyutunu ayarlayan FindTicket() işlevini çağırmadan önce dizileri çağırıyorsunuz. Ve dizi sınırların dışında.

 
Çalışmayı bıraktınız mı?