[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 10

 
tol64 :
Söyleyin bana, bir pozisyon açarken / bekleyen bir emir verirken veya sonrasında zararı durdur / kârı hemen alma olasılığını programlı olarak belirlemek mümkün müdür?


Durdurma ve kar ayarlama düzeylerini önceden kontrol edin.

MarketInfo() işlevinde kullanılan istek tanımlayıcıları. Aşağıdaki değerlerden biri olabilir:

Devamlı Anlam Tanım
MODE_LOW 1 Minimum Günlük Fiyat
MODE_HIGH 2 Maksimum günlük fiyat
MODE_TIME 5 Son teklifin alınma zamanı
MODE_BID dokuz Son alınan teklif fiyatı. Mevcut araç için, önceden tanımlanmış Bid değişkeninde saklanır.
MODE_ASK on Son alınan satış fiyatı. Geçerli sembol için önceden tanımlanmış Ask değişkeninde saklanır.
MODE_POINT on bir Teklif para biriminde nokta boyutu. Mevcut takım için önceden tanımlanmış değişken Noktada saklanır
MODE_DIGITS 12 Enstrümanın fiyatındaki ondalık noktadan sonraki basamak sayısı. Mevcut enstrüman için önceden tanımlanmış değişken Basamaklarda saklanır
MODE_SPREAD on üç Puan olarak yayılma
MODE_STOPLEVEL on dört Pip cinsinden izin verilen minimum zararı durdur/kar al seviyesi
MODE_LOTSIZE on beş Araç temel para birimi cinsinden sözleşme boyutu
MODE_TICKVALUE on altı Mevduat para birimi cinsinden enstrümanın fiyatındaki minimum değişikliğin tutarı
MODE_TICKSIZE 17 Bir enstrümanın fiyatını karşıt para biriminde değiştirmek için minimum adım
MODE_SWAPLONG on sekiz Uzun pozisyonlar için takas boyutu
MODE_SWAPSHORT on dokuz Kısa pozisyonlar için takas boyutu
MODE_STARTING 20 Ticaretin takvim başlangıç tarihi (genellikle vadeli işlemler için kullanılır)
MODE_EXPIRATION 21 İşlemin takvim bitiş tarihi (genellikle vadeli işlemler için kullanılır)
MODE_TİCARETİZİN VERİLDİ 22 Belirtilen enstrüman üzerinde işlem yapma izni
MODE_MINLOT 23 Minimum parti büyüklüğü
MODE_LOTSTEP 24 Parti Büyüklüğü Adımı
MODE_MAXLOT 25 Maksimum parti büyüklüğü
MODE_SWAPTYPE 26 Takas hesaplama yöntemi. 0 - puan olarak; 1 - enstrümanın temel para biriminde; 2 - yüzde olarak; 3 - teminat para biriminde.
MODE_PROFITCALCMODE 27 Kar hesaplama yöntemi. 0 - Forex; 1 - CFD; 2-Vadeli işlemler
MODE_MARGINCALCMODE 28 Teminat hesaplama yöntemi. 0 - Forex; 1 - CFD; 2 - gelecekler; 3 - Endekslerdeki CFD'ler
MODE_MARGININIT 29 1 lot için ilk güvenlik gereksinimleri
MODE_MARGINMAINTENANCE otuz 1 lot başına açık pozisyonları desteklemek için teminat miktarı
MODE_BARINDIRILMIŞ 31 1 lot başına kapalı pozisyonlardan alınan marj
MODE_MARGINGEREKLİ 32 Satın alma için 1 lot açmak için gereken ücretsiz fon miktarı
MODE_FREEZELEVEL 33 Donma seviyesini puan olarak sipariş edin. İşlem fiyatı donma seviyesinin belirlediği limitler içerisinde ise emir değiştirilemez, iptal edilemez veya kapatılamaz.

 
SeALALex :

Herkese merhaba! Ben sadece Expert Advisors yazmayı öğreniyorum, sıradan standart göstergelerdeki ilk Expert Advisor'ların çoğu gibi, şimdi yazdım, şimdi görevimi karmaşıklaştırdım, ancak kodun nasıl görüneceğini bilmiyorum. Genel olarak, şartlar oluştuğunda, bir pozisyon açıldığında ve kapandığında, diyelim ki aynı koşulları korurken bir alım için yeni bir tane açılmayacak şekilde nasıl yapılır, ancak sadece zıt koşullar ortaya çıktığında açılır. , vb. Teşekkürler!!!


orada yardımda neredeyse hazır örnek hazır örnek

 int i,accTotal=OrdersHistoryTotal();
  for(i=0;i<accTotal;i++)
    {
     //---- seçim sonucunu kontrol et
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==yanlış)
       {
        Print("Geçmiş veritabanına erişim hatası (",GetLastError(),")");
        kırmak;
       }
siparişin kapanış saatini hatırlamanız gerekir 
siparişin kapanış saatini önceki yinelemedeki kapanış saati ile karşılaştırın
if (kapanış süresi daha uzun ve ticaret türü al veya sat)
daha sonra mevcut siparişin zamanını ve ticaret işleminin türünü hatırlayın  
// sonuç olarak, döngünün sonunda, en son kapatılan emrin türünü biliyoruz 
    }
Bunun gibi bir şey.

 
ivandurak :


Durdurma ve kar ayarlama düzeylerini önceden kontrol edin.


Bu listede belirli hesap türleri için kontrol yoktur. NDD Hesapları için Ticaret Kurallarından bir paragraf:

3.3. Müşteri terminali aracılığıyla bir Uzman Danışman kullanılarak bir pozisyon açılırsa, Müşteri Zarar Durdurma ve/veya Kâr Alma Emirleri seviyelerini belirleyemez. Müşteri bu emirleri vermek isterse, 5.16 - 5.22 ve 9.13 - 9.16 maddeleri uyarınca mevcut bir pozisyonu değiştirerek bunu yapabilir.

Bunu programlı olarak kontrol etmenin mümkün olup olmadığını merak ediyorum. Anladığım kadarıyla, hayır. Programda, öncelikle brokerin belirlediği koşulları dikkate alarak pozisyon açma / bekleyen emir verme işlevini yazmanız gerekir.
 
tol64 :


Bu listede belirli hesap türleri için kontrol yoktur. NDD Hesapları için Ticaret Kurallarından bir paragraf:

Bunu programlı olarak kontrol etmenin mümkün olup olmadığını merak ediyorum. Anladığım kadarıyla, hayır. Programda, öncelikle brokerin belirlediği koşulları dikkate alarak pozisyon açma / bekleyen emir verme işlevini yazmanız gerekir.

Her nasılsa, sipariş verme kuralları tamamen açık değil, neyin mümkün olup neyin olmadığını demoda oynamayı deneyin. Anladığım kadarıyla, hiçbir şey programlı olarak bir emir vermenizi ve ardından onu değiştirmenizi engellemiyor.Bir pozisyon açtıktan sonra bağlantınızı kesip durmadan bırakmadığınız sürece, hak bir şekilde garip.
 
tol64 :


Bu listede belirli hesap türleri için kontrol yoktur. NDD Hesapları için Ticaret Kurallarından bir paragraf:

Bunu programlı olarak kontrol etmenin mümkün olup olmadığını merak ediyorum. Anladığım kadarıyla, hayır. Programda, öncelikle brokerin belirlediği koşulları dikkate alarak pozisyon açma / bekleyen emir verme işlevini yazmanız gerekir.

Sorun yok. Hatta (kişisel kullanım için olmasa bile, çünkü hangi hesaplarda (ticaret koşullarını ve kimden) kullanacağınızı kendiniz biliyorsunuz), ancak sipariş vermesi için bir danışman verirseniz ve müşterinin kendisi henüz hangi hesaplara ve nerede olacağına karar vermemişse aynı anda alma ve durdurma ayarlayabilme özelliğine sahip hesap türlerinde bile kullanın, daha sonra varsayılan olarak, her tür siparişi kurarken bu seviyelerin sıfır değerlerine sahip bir danışman yaparsınız, daha sonra bunların modifikasyonu ile (çalışacaktır) hem orada hem de orada), elbette, hiç kimse, belirli bir ofiste her türlü emir ve durdurma ve alım seviyelerinin ayarlanması ve daha sonra değiştirilmesi için herhangi bir seçenekle alım satım işlemleri yaparken kontrol gerekliliklerini ve kısıtlamalarını iptal etmedi.
 
ivandurak :

Her nasılsa, sipariş verme kuralları tamamen açık değil, neyin mümkün olup neyin olmadığını demoda oynamayı deneyin. Anladığım kadarıyla, hiçbir şey programlı olarak bir emir vermenizi ve ardından onu değiştirmenizi engellemiyor.Bir pozisyon açtıktan sonra bağlantınızı kesip durmadan bırakmadığınız sürece, hak bir şekilde garip.

))) Değil. Beni hiç anlamadın. "Programlı kurulum" hakkında değil, programlı olarak belirleme hakkında yazdım. Bazı hesap türlerinde hemen bir pozisyon açamazsınız ve benim için tercih edilen / daha güvenli olan stoplar / alımlar belirleyemezsiniz. mql5'te yanılmıyorsam bunu belirlemek mümkün görünüyor. Bu anı tanımlayabilmek ve tanıma bağlı olarak hangi işlevi kullanacağımı seçebilmek istiyorum.
 
Roman. :

Sorun yok. Hatta (kişisel kullanım için olmasa bile, çünkü hangi hesaplarda (ticaret koşullarını ve kimden) kullanacağınızı kendiniz biliyorsunuz), ancak sipariş vermesi için bir danışman verirseniz ve müşterinin kendisi henüz hangi hesaplara ve nerede olacağına karar vermemişse aynı anda alma ve durdurma ayarlayabilme özelliğine sahip hesap türlerinde bile kullanın, daha sonra varsayılan olarak, her tür siparişi kurarken bu seviyelerin sıfır değerlerine sahip bir danışman yaparsınız, daha sonra bunların modifikasyonu ile (çalışacaktır) hem orada hem de orada), elbette, hiç kimse, belirli bir ofiste her türlü emir ve durdurma ve alım seviyelerinin ayarlanması ve daha sonra değiştirilmesi için herhangi bir seçenekle alım satım işlemleri yaparken kontrol gerekliliklerini ve kısıtlamalarını iptal etmedi.

Evet, bir çözüm olduğunda sorun yoktur. Sadece sahip olduklarınızı kullanmanız ve doğru kullanmanız gerekiyor.))
 

Roma. ve ivandurak cevapladığınız için çok TEŞEKKÜRLER, ancak benim için hala anlaşılması zor, bunun nasıl yapılacağına dair başka bir forumda bir öneri buldum, ancak henüz normal koduma uygulayamıyorum

int BuyTrue, SellTrue;// bize hizmet edecek değişkenleri yukarıdaki flaglar olarak tanımlıyoruz
....
//--- Satın Alma Koşulu
if (BuyTrue==0 && ... ve artı diğer koşullarınız) // Poz açma koşulu
{
....
SiparişGönder(....); // sipariş açma işlevi
BuyTrue=1; // BuyTrue=1 ise, bir poz açma koşulu tam olarak karşılanmayacaktır.
// bu nedenle, tekrarlanan bir satın alma sinyali ile bir anlaşma açılmayacak
SellTrue=0; // SellTrue=0 ise, bir poz açma koşulu tamamen karşılanacaktır
// bu nedenle bir sonraki anlaşma sadece Satış olacak
....
}

//--- Satış Şartı
if (SellTrue==0 && ... ve artı diğer koşullarınız) // Poz açma koşulu
{
....
SiparişGönder(....); // sipariş açma işlevi
SellTrue=1; // SellTrue=1 ise, bir poz açma koşulu tam olarak karşılanmayacaktır.
// bu nedenle, Sat'ta tekrarlanan bir sinyalle anlaşma açılmayacak
BuyTrue=0; // BuyTrue=0 ise, bir poz açma koşulu tamamen karşılanacaktır
// bu nedenle bir sonraki anlaşma sadece Satın Al olacaktır.
....
}

Ticaret açılış kodum

toplam=SiparişToplam();
if(toplam<1)
{
// açık sipariş tanımlanmadı
if(AccountFreeMargin()<(1000*Lots))
{
Print("Paramız yok. Serbest Marj = ", AccountFreeMargin());
dönüş(0);
}
// uzun pozisyon (SATIN AL) olasılığını kontrol edin
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Yeşil);
if(bilet>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SATIN AL emri açıldı : ",OrderOpenPrice());
}
else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);
}
// kısa pozisyon (SAT) olasılığını kontrol et
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Kırmızı);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES)) Print("SAT emri açıldı : ",OrderOpenPrice());
}
else Print("SATIŞ emrini açarken hata: ",GetLastError());
dönüş(0);
}
dönüş(0);
}

 
SeALALex :

Roma. ve ivandurak Cevapladığınız için çok TEŞEKKÜRLER, ancak benim için hala anlaşılması zor, başka bir forumda bunun nasıl yapılacağına dair bir öneri buldum, ancak henüz normal koduma uygulayamıyorum

int BuyTrue, SellTrue;// bize hizmet edecek değişkenleri yukarıdaki flaglar olarak tanımlıyoruz
....
//--- Satın Alma Koşulu
if (BuyTrue==0 && ... ve artı diğer koşullarınız) // Poz açma koşulu
{
....
SiparişGönder(....); // sipariş açma işlevi
BuyTrue=1; // BuyTrue=1 ise, bir poz açma koşulu tam olarak karşılanmayacaktır.
// bu nedenle, tekrarlanan bir satın alma sinyali ile anlaşma açılmayacak
SellTrue=0; // SellTrue=0 ise, bir poz açma koşulu tamamen karşılanacaktır
// bu nedenle bir sonraki anlaşma sadece Satış olacak
....
}

//--- Satış Şartı
if (SellTrue==0 && ... ve artı diğer koşullarınız) // Poz açma koşulu
{
....
SiparişGönder(....); // sipariş açma işlevi
SellTrue=1; // SellTrue=1 ise, bir poz açma koşulu tam olarak karşılanmayacaktır.
// bu nedenle, Sat'ta tekrarlanan bir sinyalle anlaşma açılmayacak
BuyTrue=0; // BuyTrue=0 ise, bir poz açma koşulu tamamen karşılanacaktır
// bu nedenle bir sonraki anlaşma sadece Satın Al olacaktır.
....
}

Ticaret açılış kodum

toplam=SiparişToplam();
if(toplam<1)
{
// açık sipariş tanımlanmadı
if(AccountFreeMargin()<(1000*Lots))
{
Print("Paramız yok. Serbest Marj = ", AccountFreeMargin());
dönüş(0);
}
// uzun pozisyon (SATIN AL) olasılığını kontrol edin
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
bilet=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Yeşil);
if(bilet>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SATIN AL emri açıldı : ",OrderOpenPrice());
}
else Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);
}
// kısa pozisyon (SAT) olasılığını kontrol et
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Kırmızı);
if(bilet>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SAT emri açıldı : ",OrderOpenPrice());
}
else Print("SATIŞ emrini açarken hata: ",GetLastError());
dönüş(0);
}
dönüş(0);
}


İlk olarak, kodunuzu Ctrl+Alt+M ile düzenleyiciye yapıştırın (veya menünün üst kısmından SRC'ye basın), aksi takdirde bu kötü, bu anlaşılabilir - her şey birleşir... :-)))

İkincisi, ders kitabını, özellikle size önerilen bağlantıdaki bilgileri okuyun, kodun altında bunun bir açıklaması var ve açıklamanın en sonunda sadece boyanmış - yukarıda / aşağıda bir fiyat nasıl rapor edilir MA bir kez (bu ticaret koşulu için bir kerelik girişle bir analojiniz olacak - bayrakların kullanımı ve tümü), MAGIC'inizi OLUŞTURMADAN önce ... :-)))

not veya bir Google aramasında şunu yazın: site:mql4.com kodu nasıl doğru şekilde eklenir

 






if (SellTrue== 0 && A1<A2 && S1< 30 && ADX1<ADX2) // Условие открытия позы
        {
         ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 , 0 ,Bid-TakeProfit* Point , "AO sample" , 16384 , 0 , Red );
           if (ticket> 0 )
           {
             if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES ||SellTrue== 1 )) Print ( "SELL order opened : " , OrderOpenPrice ());
           }
         else Print ( "Error opening SELL order : " , GetLastError ()); 
        
         if (ticket > 0 && SellTrue== 1 )   
     {
      SellTrue= 1 ;
      BuyTrue= 0 ;                 
       Alert ( "По данным условиям сделка уже открывалась" ); // Сообщение 
     }
        }
       return ( 0 );
Roma. Çalışmıyor, değil mi?