[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 825

 
eugggy :
Genel olarak, if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))break'nin ne anlama geldiği açıktır; eğer böyle bir sipariş seçilmezse, o zaman iptal mi yoksa ne?


OrderSelect (bkz. https://docs.mql4.com/ru/trading/OrderSelect ), işlev başarısız olursa FALSE döndürür. Break operatörü, bkz. https://docs.mql4.com/en/basis/operators/break .

için basitleştirilebilir

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

seçmek için ana sipariş.

 
eugggy :


Ve benim için tamamen farklı şeyler gibi görünüyor. Söylesene, bunu kodunuza eklemek mümkün mü if(Tip==OP_BUYSTOP||Tip==OP_SELLSTOP&&Minute()<59&&Minute()>57) OrderDelete(Ticket);

Ve eğer öyleyse, hangi bölüm?


Kodunuzu görmeden şunu varsayabilirim (hepsi algoritmanıza bağlıdır):

if(OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_BUYLIMIT) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

sadece değişkenlerdeki sıra yerine konulmalı ve parantezler || ile koşullandırılmalıdır. ve && doğru yerleştirmek için.

Minute()<59&&Minute()>57 koşulu Minute()==58 şeklinde kısaltılabilir veya >= veya <= kullanılabilir

Bekleyen bir emri belirli bir sürenin sonunda veya belirli bir zamanda verirken kapatmaya zorlamak için, sona erme parametresini (siparişin sona erme tarihi) ayarlayabilirsiniz - bkz. https://docs.mql4.com/en/trading/OrderSend . Bu durumda, kapanmasını programlamakla uğraşmanıza gerek yok. Ve sipariş, iletişim eksikliği nedeniyle düzeltme yapılmadan kesin olarak kapatılacaktır.

 
eugggy :

Evet, birçok fayda. Bir freebie olmadan yapardım, ancak ders kitabı çok karmaşık bir şekilde yazılmıştır.
Görüyorsun... Nasıl "şu an konuşuyorlar"dan bahsediyorum :)

Bedava, ahbaplar! Hey! Komon evry vücut!!!

Muhtemelen, eğer SO SC ders kitabı yazılmış olsaydı, 6+ olurdu

Offtopik için özür dilerim...

 
eugggy :

Hayır, bunun yerine gerekli değil, ayrıca gerekli, grafiğe baktım: bazen fiyat Yüksek-Düşük kanalından çıkmıyor ve bekleyen emirler kalıyor. Bekleyenleri yalnızca yenilerinin ortaya çıkmasından önce kapatmak gerekir, eğer sona erme bunu çözebilirse - ben buna her şeyim. 1986 kitabı konusunda ciddi misin? Ben kendim eski olsam da, bence bu çok fazla.


Ek olarak, bu şekilde ek benzer kodlar yazmanız gerekir. Nedense bana öyle geliyor ki kodla ilgili bir tür karışıklık var.

1986 kitabı hakkında şaka yapmıyordum. Tekrar ediyorum, programlamanın temellerini anlamak istiyorsanız, modern dil yapılarıyla kafanızı karıştırmadan bunları anlamanız gerekir. Temel bilgilere ihtiyacınız var. Lise için bilgisayar bilimi ders kitapları, özellikle ilki, "aptallar" için metodik olarak iyi yazılmıştır. Modern ders kitaplarının nasıl, kim tarafından, kimin için ve neden yazıldığı ayrı bir konudur.

 

tarih saat lot fiyatı

26 2010.01.05 12:24 sat 12 0.10 1.44026 1.44907 1.43526 0.00 3200.09
28 2010.01.05 13:21 13 0.26 1.44326 1.43445 1.44826 0.00 3200.09 satın
30 2010.01.05 15:34 Sat 14 0.43 1.44026 1.44907 1.43526 0,00 3200.09
32 2010.01.05 16:27 15 satın al 0.72 1.44326 1.43445 1.44826 0.00 3200.09
34 2010.01.05 17:18 sat 16 1.19 1.44026 1.44907 1.43526 0.00 3200.09

İşte ilgili yönlerde 5 açık sipariş.

Tüm açık siparişler için toplam marj nasıl hesaplanır?

Çift: EURODOLLAR , sözleşme 100000, kaldıraç 100.

 
ikatsko :

tarih saat lot fiyatı

26 2010.01.05 12:24 sat 12 0.10 1.44026 1.44907 1.43526 0.00 3200.09
28 2010.01.05 13:21 13 0.26 1.44326 1.43445 1.44826 0.00 3200.09 satın
30 2010.01.05 15:34 Sat 14 0.43 1.44026 1.44907 1.43526 0,00 3200.09
32 2010.01.05 16:27 15 satın al 0.72 1.44326 1.43445 1.44826 0.00 3200.09
34 2010.01.05 17:18 sat 16 1.19 1.44026 1.44907 1.43526 0.00 3200.09

İşte ilgili yönlerde 5 açık sipariş.

Tüm açık siparişler için toplam marj nasıl hesaplanır?

Çift: EURODOLLAR, sözleşme 100000, kaldıraç 100.

MarketInfo( Symbol (),MODE_MARGINREQUIRED);

İhtiyacınıza bağlı olarak, satın almak için 1 lot açmak için gereken ücretsiz marj miktarını döndürür.

Ayrıca, bu yararlı olabilir:

çift AccountFreeMarginCheck ( string sembolü, int cmd, çift cilt)

Cari hesapta cari fiyattan belirtilen pozisyon açıldıktan sonra kalacak serbest teminat tutarını döndürür. Yeterli kullanılabilir para yoksa, 134 hatası (ERR_NOT_ENOUGH_MONEY) oluşturulur.
 
Hızlı yanıtınız için teşekkürler, ancak marjı bu pozisyonlar açılmadan ÖNCE hesaplamak istiyorum! Strateji bir çığdır, ilgili pozisyonları açtıktan sonra bir Durdurma olup olmayacağını bilmeniz mi gerekiyor? Yaklaşan tüm partiler için parti büyüklükleri önceden bilinmektedir. Bilmek istiyorum: Kaç sipariş (önceden belirlenmiş artan lotlarla) açılabilir?
 
ikatsko :
Hızlı yanıtınız için teşekkürler, ancak marjı bu pozisyonlar açılmadan ÖNCE hesaplamak istiyorum! Strateji bir çığdır, ilgili pozisyonları açtıktan sonra bir Durdurma olup olmayacağını bilmeniz mi gerekiyor? Yaklaşan tüm partiler için parti büyüklükleri önceden bilinmektedir. Bilmek istiyorum: Kaç sipariş (önceden belirlenmiş artan lotlarla) açılabilir?
 // ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots( double lt)
{
   double ltcorr;
   double pnt =      MarketInfo( Symbol (),MODE_POINT);
   double mspr =     MarketInfo( Symbol (),MODE_SPREAD);
   double dig =      MarketInfo( Symbol (),MODE_DIGITS);
   double MaxLot =   MarketInfo( Symbol (),MODE_MAXLOT);
   double MinLot =   MarketInfo( Symbol (),MODE_MINLOT);
   double StpLot =   MarketInfo( Symbol (),MODE_LOTSTEP);
   double OneLot =   MarketInfo( Symbol (),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble (AccountFreeMargin()/ 4.0 ,dig);     // Свободные средства, разрешенные к торговле
   
   lt= MathAbs (lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=ltcorr*OneLot +mspr*pnt ;     // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)               // Если свободных средств больше, чем цена позиции - 
      {
         return (ltcorr);                                                             // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)         // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr= MathAbs ( MathFloor (TradeMrg/OneLot/StpLot)*StpLot);               // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot +mspr*pnt ;                      
         Print ( "Func CorrectLots: лот " ,lt, " скорректирован до " ,ltcorr,
               " Стоимость позы до корректировки = " ,Money,
               " Стоимость позы после корректировки = " ,MoneyCorr
               ); 
         return (ltcorr);                                                         // ... и вернём его значение
      }
   Print ( "Func CorrectLots: лот вернули без изменений" );
   if (lt>MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<MinLot) ltcorr=MinLot;   // ... значений лота
   return (ltcorr);                             // Возврат изначального лота в непредусмотренных случаях с сообщением
}

Kendiniz için bir şeyler bulmaya çalışın... :)

Ve yeniden

çift AccountFreeMarginCheck ( string sembolü , int cmd, çift cilt)

Bu işlevi, aynı zamanda aptal bir martingale kullanan bir Uzman Danışman'da sipariş vermek için kullandım.
Daha stabil çalışma için herhangi bir pozu açmadan önce şu satırı yazdım:

 double lt;                           // Лот
// --------------------------------- +

lt=CorrectLots(lt* 2 );                 // Умножаем лот на 2 с проверкой и коррекцией под допустимый размер лота

// ------- Открытие позы ----------- +
 
Artem, marjı kendim hesaplamam gerekiyor, yani hesaplama formülünü biliyorum. Mevcut yetenekler hakkında bir terminal yanıtına ihtiyacım yok. Aslında hesaplama formülünü biliyorum ama çakışan pozisyonlar için marj hesaplamasının bir özelliği var.!!! Ve örtüşen pozisyonların ne olduğunu bile bilmiyorum! Özellikle, sonraki her pozisyonun bir öncekine zıt yönde açıldığının açık olduğu bir örnek verdi. Açık pozisyonlardaki marjı tüm lotları toplayarak hesaplarsanız (ve bu tutarı formüle eklerseniz), bu, Bayi Merkezi'nin StopOut uyguladığında gerçek tepkisi ile örtüşmez. DC'nin düşündüğü gibi düşünmek istiyorum
 
ikatsko :
Artem, marjı kendim hesaplamam gerekiyor, yani hesaplama formülünü biliyorum. Mevcut yetenekler hakkında bir terminal yanıtına ihtiyacım yok. Aslında hesaplama formülünü biliyorum ama çakışan pozisyonlar için marj hesaplamasının bir özelliği var.!!! Ve örtüşen pozisyonların ne olduğunu bile bilmiyorum! Özellikle sonraki her pozisyonun bir öncekine zıt yönde açıldığının açık olduğu bir örnek verdi . Açık pozisyonlardaki marjı tüm lotları toplayarak hesaplarsanız (ve bu tutarı formüle eklerseniz), bu, Bayi Merkezi'nin StopOut uyguladığında gerçek tepkisi ile örtüşmez. DC'nin inandığı gibi saymak istiyorum

Çakışan konumlar kilitli konumlarla aynı değil mi? Bu, eşit hacimli ancak zıt yönde iki açık pozisyonu korumak için gereken marjdır. Genellikle, iki kilitli pozisyondan biriyle aynı hacme sahip bir açık pozisyonu korumak için gereken marjın yarısıdır.

Hemen fark ettim ama kafanızı karıştıracağını düşünmedim...

Aynı Expert Advisor için marjı şöyle hesapladım, şimdi bilmiyorum belki yanlıştır??? :

 // ======================================================================
// -------------------------- Рассчёт свободной маржи -------------------
// ======================================================================
bool LastFreeMargin( string sy, int op, double lot)
{
   if (sy== "0" || sy== "" ) sy=Symbol();
   double FreeEqu  = AccountFreeMargin();                         // Вся маржа
   double FreeEqu4 = NormalizeDouble(Equ_Start/ 4.0 , 2 );           // Делим маржу на 4 (Средства для торговли)
   double CheckEqu = AccountFreeMarginCheck(sy, op, lot);         // Остаток всех средств после открытия позы 
   double EquTrade = FreeEqu-CheckEqu;                             // Средства, требуемые для открытия следующей
   
   if (FreeEqu4-EquTrade> 0 ) return ( true );
   else return ( false );
}   

DC'nin size geri verdiği tek şey bu:

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ı