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

 
Alexey Viktorov :
Evet, gerçekten... Böyle bir komisyoncuyu nerede bulabilirim... Bağlantıyı paylaşır mısınız?
Her şey burada. Bid'de kapanışları satın al
 
Dikkatsizlik için özür dilerim. "aç" diye okudum...
 

günün iyi zamanı,

Soru:

Lütfen bana bekleyen siparişi neden satın alma işlemine koyamadığımı söyleyin:

request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(ofset)*nokta;

ofset = 1'de düşüyor hata :

  başarısız satın alma durağı 0.10 AUDNZD.m, 1.03748'den [Geçersiz fiyat] , t . e . biraz seviye fiyatlar ( en benim durum )

 

Ne zaman, hemen ardından “infaz emri” verilirken

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)

her şey yolunda gidiyor (yani sipariş verildi):

sipariş gerçekleştirildi 0,10 1,03747'den satın alın [#2 1,03747'den 0,10 AUDNZD.m satın alın]

Bekleyen bir emir ( 1.03748 ) neden kabul edilmiyor ? 1.03747'de - ayarlanmış ve 1.03748'de - küçük bir değer mi? (sonuçta , SYMBOL_ASK spread'i hesaba katar ve ofset - puan olarak sipariş vermek için mevcut fiyattan ofset 1 artar)

Ancak offset= 100 ise: bekleyen emir BUY_STOP fiyatı = 1.03847 – zaten çalışıyor


Teşekkür ederim.
 
Konstantin_78 :

günün iyi zamanı,

Soru:

Lütfen bana bekleyen siparişi neden satın alma işlemine koyamadığımı söyleyin:

request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(ofset)*nokta;

ofset = 1'de düşüyor hata :

  başarısız satın alma durağı 0.10 AUDNZD.m, 1.03748'den [Geçersiz fiyat] , yani küçük bir fiyat seviyesi (benim durumumda)

 

Ne zaman, hemen ardından “infaz emri” verilirken

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)

her şey yolunda gidiyor (yani sipariş verildi):

sipariş gerçekleştirildi 0,10 1,03747'den satın alın [#2 1,03747'den 0,10 AUDNZD.m satın alın]

Bekleyen bir emir ( 1.03748 ) neden kabul edilmiyor ? 1.03747'de - ayarlanmış ve 1.03748'de - küçük bir değer mi?

Ama eğer offset= 100 : bekleyen emir BUY_STOP fiyatı = 1.03847 – zaten çalışıyor


Teşekkür ederim.

Kendi sorunuzu kendiniz cevapladınız.

Böyle bir durma seviyesi parametresi vardır - mevcut fiyattan bekleyen bir emir verme fiyatına gereken minimum mesafe - her enstrümanın kendi değeri vardır ve ticaret koşullarında belirlenir

 
Andrey F. Zelinsky :

Вы же сами и ответили на свой вопрос.

Есть такой параметр stoplevel -- минимально необходимое расстояние от текущей цены до цены установки отложенного ордера -- для каждого инструмента своё значение и задаётся в торговых условиях 

O zaman aşağıdakiler doğru olacaktır:

fiyat =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)*nokta

Bununla birlikte, "... cari fiyattan" yazdıysanız, yayılmanın bununla ne ilgisi var? Hangi SYMBOL_ASK dahildir (çünkü SYMBOL_ASK = açılış fiyatı + spread).

 
Vladimir Karputov :

Size yardımcı olması için bir örnek ekledim...

Elbette, örnek yardımcı oldu. Teşekkür ederim.


Şimdi böyle bir soru.

Partiyi arttırırken, bir noktada neredeyse hiç ücretsiz fon olmaz ve onu artan bir lotla açmanız gerekir.

Yani, FreeMargin'in izin verdiği şekilde maksimum lot ile girin.

Böyle bir koşul nasıl yazılır : Hesaplanmış bir lot ile bir pozisyon açmak için yeterli fon yoksa, fonksiyon bir pozisyon açmak için mümkün olan maksimum lotu döndürmelidir.

double LotA()
{
   double Lot=FirstLot;

   if (DoublingCount<= 0 ) return Lot;
   double MaxLot= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
   double MainLot= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
if (Lot<MainLot)Lot=MainLot;
     if (Lot>MaxLot)Lot=MaxLot;
   double lt1=Lot;
   HistorySelect ( 0 , TimeCurrent ());
   if ( HistoryOrdersTotal ()== 0 ) return (Lot);
   double cl= HistoryOrderGetDouble ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 1 ), ORDER_PRICE_OPEN );
   double op= HistoryOrderGetDouble ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 2 ), ORDER_PRICE_OPEN );

   long typeor= HistoryOrderGetInteger ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 2 ), ORDER_TYPE );
   if (typeor== ORDER_TYPE_BUY )
     {
       if (op>cl)
        {
         if (ud<DoublingCount)
           {
            lt1= HistoryOrderGetDouble ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 2 ), ORDER_VOLUME_INITIAL )*_C_;
            ud++;
           }
         else ud= 0 ;
        }
       else ud= 0 ;
     }
   if (typeor== ORDER_TYPE_SELL )
     {
       if (cl>op)
        {
         if (ud<DoublingCount)
           {
            lt1= HistoryOrderGetDouble ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 2 ), ORDER_VOLUME_INITIAL )*_C_;
            ud++;
           }
         else ud= 0 ;
        }
       else ud= 0 ;
     }
   if (lt1>MaxLot)lt1=MaxLot;
   lt1=LotCheck(lt1);
   return (lt1);
  }
//+------------------------------------------------------------------+}
 
Marina Korotkih :

Elbette, örnek yardımcı oldu. Teşekkür ederim.


Şimdi böyle bir soru.

Partiyi arttırırken, bir noktada neredeyse hiç ücretsiz fon olmaz ve onu artan bir lotla açmanız gerekir.

Yani, FreeMargin'in izin verdiği şekilde maksimum lot ile girin.

Böyle bir koşul nasıl yazılır : Hesaplanmış bir lot ile bir pozisyon açmak için yeterli fon yoksa, fonksiyon bir pozisyon açmak için mümkün olan maksimum lotu döndürmelidir.

               

double Mgn,Lot=0,BID,ASK;

    BID=SymbolInfoDouble(_Symbol,SYMBOL_BID);
    ASK=SymbolInfoDouble(_Symbol,SYMBOL_ASK);

    if ( OrderCalcMargin ( ORDER_TYPE_BUY , _Symbol , 1 ,ASK,Mgn)== true )Lot= AccountInfoDouble ( ACCOUNT_MARGIN_FREE )/Mgn;

   if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot= AccountInfoDouble ( ACCOUNT_MARGIN_FREE )/Mgn;
                        

Marina, belki öyle?

Biri SATIŞ açmak için, diğeri SATIN AL açmak için olmak üzere iki hesaplama seçeneği uygularsınız.

 
Renat Akhtyamov :

                   if ( OrderCalcMargin ( ORDER_TYPE_BUY , _Symbol , 1 ,ASK,Mgn)== true )Lot= AccountInfoDouble ( ACCOUNT_MARGIN_FREE )/Mgn;

                  if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot= AccountInfoDouble ( ACCOUNT_MARGIN_FREE )/Mgn;
                        

Marina, belki öyle ?

Hayır, öyle değil.

Sadece mümkün olan maksimum lotu hesaplamak değil, aynı zamanda izin verilen minimum lot için her şeyi kontrol etmek gerekir, çünkü minimum lotun 0.01 olduğu ve marjın sadece 0.009 açmanıza izin verdiği bir durum meydana gelebilir, sonra işkence yaparsınız. asla kabul edilmeyecek istekleri olan sunucu, ancak sizin için önlemler kabul edilebilir)

 
Vitaly Muzichenko :

Hayır, öyle değil.

Sadece mümkün olan maksimum lotu hesaplamak değil, aynı zamanda izin verilen minimum lot için her şeyi kontrol etmek gerekir, çünkü minimum lotun 0.01 olduğu ve marjın sadece 0.009 açmanıza izin verdiği bir durum meydana gelebilir, sonra işkence yaparsınız. asla kabul edilmeyecek istekleri olan sunucu, ancak sizin için önlemler kabul edilebilir)

Tam kodu olması gerektiği gibi yazın, peki, aynı anda bir göz atacağım ....?

Artık her zaman sizden öğreneceğim ve cevapların eksiksiz olması için sizinle ilgileneceğim.

Bir zamanlar teknik şef olarak çalıştım, merak etmeyin her şey yoluna girecek!

Birlikte bir ekibiz!

 
Marina Korotkih :

Elbette, örnek yardımcı oldu. Teşekkür ederim.


Şimdi böyle bir soru.

Partiyi arttırırken, bir noktada neredeyse hiç ücretsiz fon olmaz ve onu artan bir lotla açmanız gerekir.

Yani, FreeMargin'in izin verdiği şekilde maksimum lot ile girin.

Böyle bir koşul nasıl yazılır : Hesaplanmış bir lot ile bir pozisyon açmak için yeterli fon yoksa, fonksiyon bir pozisyon açmak için mümkün olan maksimum lotu döndürmelidir.


Kaygan bir yoldasın.