Teminat Seviyesine göre İşlem Durdurma - YARDIM

 

Merhaba arkadaşlar expertime benim belirlediğim teminat seviyesi şirketin yüzde olarak teminat seviyesi altına düşerse yeni işlem açmayı durdursun istiyorum. Bunu nasıl  yapabilirim. yardımcı olabilir misiniz.


input double = EnDusukTeminatSeviyesi = 500 ; // İşlem durdurma Bölgesinin Teminatı

double  = HesabinTeminati = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL); // Yüzde olarak marjin seviyes,


void OnTick()
  {

   if(HesabinTeminati < EnDusukTeminatSeviyesi )

   {

      Alert("Teminat Seviyesi Yüzünden  Expert Durduruldu");

      ExpertRemove();

      }
 }

Bu şekilde aklıma geldi ancak experti silmesini istemiyorum. Teminat seviyesi Aktif olduğunda işlem açmaya devam etsin istiyorum. Bunu nasıl yapabilirim. Bilgisi olan var mı ? 

 
Yasar Sari:

Merhaba arkadaşlar expertime benim belirlediğim teminat seviyesi şirketin yüzde olarak teminat seviyesi altına düşerse yeni işlem açmayı durdursun istiyorum. Bunu nasıl  yapabilirim. yardımcı olabilir misiniz.


Bu şekilde aklıma geldi ancak experti silmesini istemiyorum. Teminat seviyesi Aktif olduğunda işlem açmaya devam etsin istiyorum. Bunu nasıl yapabilirim. Bilgisi olan var mı ? 

İkinci satırda double dan sonra = olmaz hata verir.
Yaklaşım tarzı doğru olabilir ama remove kullanmak istemiyorsan bakış açını değiştirmen gerek. 
 
Ahmet Metin Yilmaz #:
İkinci satırda double dan sonra = olmaz hata verir.
Yaklaşım tarzı doğru olabilir ama remove kullanmak istemiyorsan bakış açını değiştirmen gerek. 

Hocam experti kaldırmadan işlemleri durdurma konusunda biraz araştırdım. Ancak hata alıyorum hata ve kodlar aşağıdadır;

double TeminatSeviyesi = 500; // Belirlediğiniz teminat seviyesi 
double MarjinLevel = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL);

if (MarjinLevel <= TeminatSeviyesi )
{
    bool result = TradeAllowed(false);

    if (!result)

    {
        Print("Yeni işlemler durdurulamadı: ", GetLastError());
    }

}


Bu yaklaşım doğru mu hocam? Doğruysa bu hatanın çözümü nasıl olmalıdır?

 
Yasar Sari #:

Hocam experti kaldırmadan işlemleri durdurma konusunda biraz araştırdım. Ancak hata alıyorum hata ve kodlar aşağıdadır;


Bu yaklaşım doğru mu hocam? Doğruysa bu hatanın çözümü nasıl olmalıdır?

Derleme hataları bunlar
Kodlamayı tam olarak öğrenmeniz lazım. Yapacağınız her işlemi düzeltmenin yollarını aramakla tam olarak kodlama mantığını anlamanız çok zor. 
Evet bu bakış açısı da işe yarar ama kod derleme hatalarını düzeltirseniz işe yarar. 
 
Sizin şuanki bilginiz dahilinde bakış açınızı değiştirmeniz lazım.
Siz margin belirli bir seviyeye gerilediğini experti neyi yapmamasını istiyorsanız, bunun tersini düşünün. 
Yani margin belirli bir seviyenin altına gelmedi ise expertin işlem açması şeklinde odaklanın konuya. 
 
yardımı oldu mu yazdıklarımın?
 
Ahmet Metin Yilmaz #:
Derleme hataları bunlar
Kodlamayı tam olarak öğrenmeniz lazım. Yapacağınız her işlemi düzeltmenin yollarını aramakla tam olarak kodlama mantığını anlamanız çok zor. 
Evet bu bakış açısı da işe yarar ama kod derleme hatalarını düzeltirseniz işe yarar. 

Hocam #include <Trade\AccountInfo.mqh> kütüphanesini de cağırdım ona bağlı olduğu için ama yine de derlemede bu hata çıktı çözemiyorum. Nasıl çözüleceği ile ile ilgili de herhangi bir kaynak bulamadım.

 
Ahmet Metin Yilmaz #:
yardımı oldu mu yazdıklarımın?

Maalesef hocam düşünüyorum düşünüyorum çözüm bulamadım.

 
Yasar Sari #:

Maalesef hocam düşünüyorum düşünüyorum çözüm bulamadım.

Marginlevel > Teminatseviyesi önermesini alım koşulu olarak tanımlayın, önerme uygun değilse alım işlemi açmaz. 
 

En son bahsettiğim konuda ilerlersen bu sorunda mql tarafından çoktan çözüldüğünü görürsün


MoneyFixedMargin.mqh  e bakarsan


   virtual double    CheckOpenLong(double price,double sl);

   virtual double    CheckOpenShort(double price,double sl); 

iki ch3eck var alım satımda bu checkleri aşmadan expertin alım yada satım yapamaz

bu sınıfta  marjin yüzdesi  ilk seferde belirleyen fonksiyon 

void              Percent(double percent) { m_percent=percent; }

kısaca ontickle bunu sorgulamaya gerek yok  işleme girmeden önce para durumu kontrol edilmeli para yeterli ise alınmalı

OnTick, serverden gelen her değişimde aktif olur  programın bu kısmında onticke eklediğin şey PC ni kasar çok kaynak harcar

burada sadece stop los yada iz sürücüyü kontrol etmen yeterli 

 
Mustafa Damgaci #:

En son bahsettiğim konuda ilerlersen bu sorunda mql tarafından çoktan çözüldüğünü görürsün


MoneyFixedMargin.mqh  e bakarsan


   virtual double    CheckOpenLong(double price,double sl);

   virtual double    CheckOpenShort(double price,double sl); 

iki ch3eck var alım satımda bu checkleri aşmadan expertin alım yada satım yapamaz

bu sınıfta  marjin yüzdesi  ilk seferde belirleyen fonksiyon 

void              Percent(double percent) { m_percent=percent; }

kısaca ontickle bunu sorgulamaya gerek yok  işleme girmeden önce para durumu kontrol edilmeli para yeterli ise alınmalı

OnTick, serverden gelen her değişimde aktif olur  programın bu kısmında onticke eklediğin şey PC ni kasar çok kaynak harcar

burada sadece stop los yada iz sürücüyü kontrol etmen yeterli 

Hocam şu kodlar ile denerken çözdüm şuanlık gerek kalmadı ama söylediğiniz kütüphaneye bakkıyorum ileride yardımcı olur diye çok teşekkür ederim.

input double MinMarjinSeviyesi = 1000; // belirlediğiniz minimum marjin seviyesi
double MevcutMarjinSeviyesi;

void OnTick()
  {

int total = PositionsTotal();

for (int i = 0; i < total; i++) {

      MevcutMarjinSeviyesi = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL);

   // Mevcut marjin seviyesi belirlenen minimum seviyenin altındaysa, yeni işlem açmamak için programı durdur
   if (MevcutMarjinSeviyesi < MinMarjinSeviyesi)
   {
      Alert("Marjin Seviyesi Minimum Seviyenin Altına Düştü!");
      return;
   }
      }
	}

Bu kodlar ile işlemleri kapatmadan marjin level altına geldiğinde işlem açmayı bırakıyor üstüme çıkınca devam ediyor işlemlere belki ihtiyacı olan olur diyerek paylaştım

Neden: