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

 
skyjet :

Cevabınız için çok teşekkür ederim! Ama yine de, Ask[0],Bid[0]'dan sonra gelecek çubuğu nasıl tanımlayabilirim?

Bu gelecekteki çubuk göründüğünde, sıfır olacaktır. Ve şimdi [0] olan çubuk [1] olacaktır.


Ask ve Bid dizileri DEĞİLDİR, yalnızca bir geçerli değer vardır, tüm geçmişler unutulur

 

Lütfen hesaplamada bana yardım edin
çünkü ödeme mevduatım tam olarak terminalle çakışıyor
yalnızca tüm siparişler tamamen kilitlendiğinde
Sipariş sistemine bir sipariş daha eklemeye değer - rehin sonucu
terminal her zaman ödeme mevduatımdan çok az farklı
ama kurşunun içinde kurşun olduğunu asla söyleyemem!
İşte çok kısa bir örnek:

Hesapta her biri 10.00 lot olmak üzere 4 adet sipariş açılmıştır ve bunlardan ikisi bisiklettir.
ve iki köy. Hesabın bakiyede olduğu ve tüm siparişlerin kilitli olduğu açıktır.
Her sipariş için standart marjı dikkate alıyoruz, 4'e bölün ve her tür üst
Terminal ile tam olarak çalar.

1.00 lota 1.4059 oranında bir bisiklet daha koyduk
Bir depozito düşünüyoruz. Bunun için standart bir depozito ödenmesi gerektiği açıktır.
mevcut tüm siparişler kilitte olduğundan.
1:100 kaldıraç için yeni bir bisiklet için depozitomuz var

ZALAl = 140.59*1.00 = 140.59

Bu nedenle, önceki rehin bu miktar kadar artmalıdır,
1.00 bisikletimiz için eski depozitoyu ve depozitoyu ekliyoruz

ZAL=ZALeski + ZALAl = 1407.23 + 140.59 = 1547.82

Bisikleti terminale kurduktan sonra depozito 1547.91 idi.
Bisikleti 9 puan daha yükseğe koyarsam kabul edilebilir.
1.4068 oranında teminattaki reel artışı hesaplarsak
ÖNCE ve SONRA marjı arasındaki fark olarak, sadece standart marjı elde ederiz.
1.00 lot için 1.4068 oranında

1547.91 - 1407.23 = 140.6801

Terminalin versiyonunu değiştirdi - ne yazık ki yardımcı olmadı!

-------------------------------------------------- ---

Vaktinizi aldığım için kusura bakmayın ama bunlar
sürekli küçük tutarsızlıklar çok can sıkıcı
çünkü makinem çeşitli senaryoları değerlendiriyor,
ve teminat olarak bakiye ve kar hesaplamalar için kullanılır
uygulanmadan önce belirli işlemlerden sonra tüm hesap parametreleri
Bu nedenle, doğruluk burada oldukça arzu edilir.
Belki bir şey anlamıyorum, ama ne kadar belgelere bakmadım
bu tutarsızlığın nedenini bulamadı.
Yardımın için çok minnettar olurum!


Saygılarımızla, MADZX
 
keep87 :


Bu ayarı unutabilirsiniz. Mutfak paranızı almak isterse bir yeniden fiyat teklifi olur, boşluğun ne olduğu umurlarında bile değil, yine de yapacaklar) Kendilerine "en iyi komisyoncu XXXXX" diyen çoğu dolandırıcılık şirketindeki algoritmik ticaretin gerçekleri bunlar. (XXXXXX - zaten orada olan kıtanın veya galaksinin adını girin)

Değiştir ayarı değiştirmeyin, her şey aynı kalacak.


Kesinlikle doğru! Ben de buna rastladım!
 
skyjet :
Merhaba ! Lütfen bana gerçek bar +1'in tanımını söyleyin. Örneğin, gerçek olanın değil, bir sonraki çubuğun fiyatına ihtiyacım var.

Anladığım kadarıyla gelecekten makineden bilgi almaya çalışıyorsunuz.
Bir yolunu bulursanız - paylaşın, minnettar olacağım :)
 
Kobalerro :
Hepiniz hoşgeldiniz. Programlamada yeniyim, bu yüzden sizden sorunu çözmenizi rica ediyorum.

Bir hesaptaki birkaç danışmanın sınırlı sayıda sipariş açması gerekir.

Örneğin: 10 Uzman Danışman, ancak yalnızca 5 emir açılabilir, ancak döviz çifti başına birden fazla olamaz.

Aşağıdaki gibi uygulanır, ancak bu şekilde çalışmaz.

extern int МаксКолОрдеров   = 5;

//+------------------------------------------------------------------+

int ПодсчетОткрОрдеров() {
  int k=OrdersTotal();
   if (Символ=="0") Символ=Symbol();
    for (int i=МаксКолОрдеров; i<k; i++) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Символ || Символ=="") {
       if (МагикНомер<0 || OrderMagicNumber()==МагикНомер) {
      if (OrderMagicNumber()<1) return(True);
     }
    }
   }
  }
 return;

}

//+------------------------------------------------------------------+
int start()
  {
   if(ПодсчетОткрОрдеров()==0)ПровТоргУсловий();
   }


Bunun gibi benzer bir gösteri uygulardım:
10 atınızın her biri, sanki komşu odalardaymış gibi kendi programlarına göre çalışır.
ve bu nedenle hiçbiri duvarın arkasındaki komşunun ne yaptığını bilmiyor - asıl sorun bu
girişiminiz için!
Bu nedenle, her danışmana eylemlerini bir disk dosyasına yazmalarını söylerdim.
terminal dizininde bulunduğu için tüm atlar için geçerli olacaktır.
İçlerinden herhangi birinin penceresinde bir şey yontmak için yakıcı bir arzusu varsa
önce bu dosyayı analiz etmeli ve uygulama olasılığını kontrol etmelisiniz.
bu arzu!
gösteri betiğinizle ilgili olarak, dosyaya sipariş sayısını yazmanız gerekir.
ve açık oldukları döviz çiftleri
Tip :
EURUSD 1
GBPUSD 1
EURGBP 0

Burada EURUSD ve GBPUSD için hangi işlemlerin açılacağını görüyoruz.   imkansız çünkü senaryoya göre izin verilmiyor
çift başına birden fazla sipariş var.
Eserde ne kadar çift varsa o kadar çizgi olacağı açıktır.
Bu karar ile tüm atlarınız o anda neler olup bittiğinin her zaman farkında olacaktır.
ve şu anda herhangi bir eyleme izin verilip verilmediğini hesaplayabilecektir.
Herhangi bir çift için sipariş verirken, istediğiniz satıra bir tane koymalısınız.
Kapatırken - sıfır ile değiştirin
Yeni başlayanlar için uygulanması biraz zor olsa da, bu kesinlikle işe yarayacaktır.
Ancak, devam edin, çünkü herkes oradaydı - sanki o an için yeni gelenler gibi!

İyi avlar!
MADZX

 

Bir geri alma stratejisi yazıyorum. İlgili mumun ekstremumunun üstüne (altına) yerleştirilecek bir durdurma emrine ihtiyacım var. İşte bir örnek:

Kapanış, açılıştan daha düşükse, bunun bir düşüş mumu olduğu ve bunun tersi - bir yükseliş mumu olduğu açıktır. Önceki mumun yükseliş olduğunu söyledikleri bir koşulun nasıl yapılacağıyla ilgileniyorum .. bu yüzden ... şunu ve şunu yapıyoruz.

Mantıksal olarak mum türünü belirleyecek bir fonksiyon yapıyorum.

 int CandleType()
{
   if (Open[ 1 ] > Close[ 1 ])
     return (BullCandle);
    
   if {Open[ 1 ] < Close[ 1 ]}
     return (BearCandle);
    
   return (dodji);
}

Ardından, bir şekilde endeks 1'e sahip çubuğun yükseliş veya düşüş eğiliminde olmasını istemeniz gerekir ... ve .. sth. Yapmak..

Nasıl yapılır?

 
madzx :


Bunun gibi benzer bir gösteri uygulardım:
10 atınızın her biri, sanki komşu odalardaymış gibi kendi programlarına göre çalışır.
ve bu nedenle hiçbiri duvarın arkasındaki komşunun ne yaptığını bilmiyor - asıl sorun bu
girişiminiz için!
Bu nedenle, her danışmana eylemlerini bir disk dosyasına yazmalarını söylerdim.
terminal dizininde bulunduğu için tüm atlar için geçerli olacaktır.
İçlerinden herhangi birinin penceresinde bir şey yontmak için yakıcı bir arzusu varsa
önce bu dosyayı analiz etmeli ve uygulama olasılığını kontrol etmelisiniz.
bu arzu!
gösteri betiğinizle ilgili olarak, dosyaya sipariş sayısını yazmanız gerekir.
ve açık oldukları döviz çiftleri
Tip :
EURUSD 1
GBPUSD 1
EURGBP 0

Burada EURUSD ve GBPUSD için hangi işlemlerin açılacağını görüyoruz.   imkansız çünkü senaryoya göre izin verilmiyor
çift başına birden fazla sipariş var.
Eserde ne kadar çift varsa o kadar çizgi olacağı açıktır.
Bu karar ile tüm atlarınız o anda neler olup bittiğinin her zaman farkında olacaktır.
ve şu anda herhangi bir eyleme izin verilip verilmediğini hesaplayabilecektir.
Herhangi bir çift için sipariş verirken, istediğiniz satıra bir tane koymalısınız.
Kapatırken - sıfır ile değiştirin
Yeni başlayanlar için uygulanması biraz zor olsa da, bu kesinlikle işe yarayacaktır.
Ancak, devam edin, çünkü herkes oradaydı - sanki o an için yeni gelenler gibi!

İyi avlar!
MADZX

Tavsiyen için teşekkürler ama biraz zor. Ve sonra sürümünüzde herkesin çalıştığı ortaya çıktı, ancak giriş koşulunu kontrol etmek 10 alıyor,

ve ilk başarılı olan sadece beşi açılır ve sonra biri kapatıldığında, koşulları karşılayan ilk kişi tekrar açılır,

sınırlı değil EURUSD 1 , GBPUSD 1 , EURUSD 0.

Bence daha basit bir çözüm olmalı. Belirtilen parametreyi sınırlamak koşuluyla toplam sipariş sayısını saymaya benzer.

Ve kısıtlama ya sembolle ya da sihirle birden fazla değil.

Belki sizin seçeneğiniz de uygundur, ancak bunu kodda nasıl uygulayacağımı çözemiyorum.

 
hoz :

Burada garip bir şeyim var. Emirleri açma işlevleri şunlardır:

işte hata:

 if (SL < g_stopLevel)
    SL = g_stopLevel*pt;

eğer durma seviyesi = 5 ise, o zaman kaybı durdurmayı 0.00005'e koymaya çalışıyorsunuz.

ikinci hata ise siparişi nereye verdiğinizi kontrol etmemenizdir. mum yüksek-düşük seviyesine yakın veya üzerinde kapanırsa 130 hatası alırsınız. resimde gördüğünüz gibi, bir satış stopu açmaya çalıştığınız için server hemen sizin için bir sellstop yerine bir satış emri açtı. herhangi bir nedenle mevcut fiyattan daha yüksek veya ona eşit bir fiyattan sipariş vermek.

baskıları nasıl kullanacağınızı öğrenin. Sadece Print(); doğru yere, gerekli değişkenleri parantez içine alın ve şununla ayırın: , ", örneğin şunun gibi: Print(Price," ",SL); ve "uzmanlar" sekmesinde bir sipariş açma anında test ederken, bu değişkenlerin neye eşit olduğunu görecek ve neyin yanlış olduğunu anlayabilirsiniz.

ayrıca günlükte danışmanın ne yapmaya çalıştığı, zararı durdurun nereye koyacağı, kârı nereye koyacağı yazılır. Orada ihtiyacınız olan her şeyi göreceksiniz.

Mantıksal olarak mum türünü belirleyecek bir fonksiyon yapıyorum.

her şey biraz daha basit, start fonksiyonunun içinde çalışacağız.

en başından son mumun yönünü yazacağımız bir değişken oluşturacağız.

int Candle=-1;

onu belirli bir değerle dolduracağız, bunlardan biri mumun yükselişte olduğunu, diğeri ise düşüşte olduğunu gösterecek. -1 ise, o zaman yok (belirlenemedi veya kapalı=açık yönü yok).

Değeri 0 - al, 1 - sat;

devamını yazıyoruz:

if(Close[1]>Open[1]) Mum=0; başka
if(Kapat[1]<Aç[1] Mum=1;

şimdi tanımlı bir yönümüz var ve onu doğrudan OrderSend işlevinde kullanabiliriz ( string symbol, int cmd , ...diğer pislik...);

if(Mum!=-1) SiparişGönder (Symbol(), Mum ,   ...gerisi saçmalık...);

veya benzetmenizde:

if(Mum==0) OpenBuy();
if(Mum==1) OpenSell();

 
Kobalerro :

Tavsiyen için teşekkürler ama biraz zor. Ve sürümünüzde herkesin çalıştığı ortaya çıktı, ancak giriş koşulunu kontrol etmek 10 alıyor,

ve ilk başarılı olan sadece beşi açılır ve sonra biri kapatıldığında, koşulları karşılayan ilk kişi tekrar açılır,

sınırlı değil EURUSD 1 , GBPUSD 1 , EURGBP 0.

Bence daha basit bir çözüm olmalı. Belirtilen parametreyi sınırlamak koşuluyla toplam sipariş sayısını saymaya benzer.

Ve kısıtlama ya sembolle ya da sihirle birden fazla değil.

Belki sizin seçeneğiniz de uygundur, ancak bunu kodda nasıl uygulayacağımı çözemiyorum.


Ya da belki şöyle:

 if (NumberOfPositions( "EURUSD" )== 0 && NumberOfPositions()< 10 )
Ve işte fonksiyon
 
keep87 :

işte hata:

eğer durma seviyesi = 5 ise, o zaman 0.00005'te durdurma kaybını koymaya çalışıyorsunuz.

ikinci hata ise siparişi nereye verdiğinizi kontrol etmemenizdir. mum yüksek-düşük seviyesine yakın veya üzerinde kapanırsa 130 hatası alırsınız. resimde gördüğünüz gibi, bir satış stopu açmaya çalıştığınız için server hemen sizin için bir sellstop yerine bir satış emri açtı. herhangi bir nedenle mevcut fiyattan daha yüksek veya ona eşit bir fiyattan sipariş vermek.

baskıları nasıl kullanacağınızı öğrenin. Sadece Print(); doğru yere, gerekli değişkenleri parantez içine alın ve şununla ayırın: , ", örneğin şunun gibi: Print(Price," ",SL); ve "uzmanlar" sekmesinde bir sipariş açma anında test ederken, bu değişkenlerin neye eşit olduğunu görecek ve neyin yanlış olduğunu anlayabilirsiniz.

ayrıca günlükte danışmanın ne yapmaya çalıştığı, zararı durdurun nereye koyacağı, kârı nereye koyacağı yazılır. Orada ihtiyacınız olan her şeyi göreceksiniz.

O yüzden zaman zaman kullanıyorum. Bak, fonksiyonlar şöyle görünüyor:

 //+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
  int ticket = - 1 ;
  string myNote = "Сов баянул" ;
  
  double price = High[ 1 ] + i_thresholdFromInput*pt;
  Print ( "price = " , price);
  double SL = Low[ 1 ] - i_thresholdFromBasedSL*pt ;
  Print ( "SL = " , SL);

  if(price > Ask)
  {
    ticket = OrderSend ( Symbol (),OP_BUYSTOP, 0.1 , NormalizeDouble (price, Digits ),i_slippage, 0 , 0 ,myNote,i_myMagic, TimeCurrent () + 600 ,Navy);
  }
  
  if (ticket > 0 && OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES) == true )
    if (!OrderModify(ticket,OrderOpenPrice(), NormalizeDouble (SL, Digits ), NormalizeDouble (High[ 1 ] + i_tp*pt, Digits ), 0 ,Navy))
    return ( false );
  
  return ( true );
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell()
{
  int ticket = - 1 ;
  string myNote = "Сов шортанул" ;
  
  double price = Low[ 1 ] - i_thresholdFromInput*pt;
  Print ( "price = " , price);
  double SL = High[ 1 ] + i_thresholdFromBasedSL*pt;
  Print ( "SL = " , SL);
  
  if(price < Bid)
  {
    ticket = OrderSend ( Symbol (),OP_SELLSTOP, 0.1 , NormalizeDouble (price, Digits ),i_slippage, 0 , 0 ,myNote,i_myMagic, TimeCurrent () + 600 ,Red);
  }
  
  if (ticket > 0 && OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES) == true )
    if (!OrderModify(ticket,OrderOpenPrice(), NormalizeDouble (SL, Digits ), NormalizeDouble (Low[ 1 ] - i_tp*pt, Digits ), 0 ,Red))
    return ( false );
    
  return ( true );
}

Bir dergide okudum:

 2012.12 . 25 18 : 20 : 16     2012.02 . 13 00 : 05  5 _minites_TS_by_Philippe Nell EURUSD,M5: modify # 1 buy stop 0.10 EURUSD at 1.32103 sl: 1.32007 tp: 1.32243 ok
2012.12 . 25 18 : 20 : 16     2012.02 . 13 00 : 05  5 _minites_TS_by_Philippe Nell EURUSD,M5: open # 1 buy stop 0.10 EURUSD at 1.32103 ok
2012.12 . 25 18 : 20 : 16     2012.02 . 13 00 : 05  5 _minites_TS_by_Philippe Nell EURUSD,M5: SL = 1.3201
2012.12 . 25 18 : 20 : 16     2012.02 . 13 00 : 05  5 _minites_TS_by_Philippe Nell EURUSD,M5: price = 1.321
2012.12 . 25 18 : 20 : 14     2012.02 . 13 00 : 00  5 _minites_TS_by_Philippe Nell EURUSD,M5: OrderSend error 130
2012.12 . 25 18 : 20 : 14     2012.02 . 13 00 : 00  5 _minites_TS_by_Philippe Nell EURUSD,M5: SL = 1.3194
2012.12 . 25 18 : 20 : 14     2012.02 . 13 00 : 00  5 _minites_TS_by_Philippe Nell EURUSD,M5: price = 1.3204
2012.12 . 25 18 : 20 : 14     5 _minites_TS_by_Philippe Nell inputs: i_fastMaPeriod= 10 ; i_slowMaPeriod= 21 ; i_filtrMaPeriod= 50 ; i_trading_TF= 5 ; i_thresholdFromInput= 1 ; i_thresholdFromBasedSL= 1 ; i_slippage= 3 ; i_tp= 15 ; i_myMagic= 33330215 ; 
2012.12 . 25 18 : 20 : 12     5 _minites_TS_by_Philippe Nell EURUSD,M5: loaded successfully

Başlangıçta satın alma fiyatından durağa kadar 1.3204 - 1.3194 = 0.001 puanlık bir fark olduğu ortaya çıktı.

İlave 1.3210 - 1.3201 = 0.009 puan

Ve nedense, ikinci durumda, stop giriş fiyatına daha yakındı, ANCAK hata YOK! Düşündüm ve anlamadım.

Hatayı sonradan düzelttim. Kodda zaten koşullar var:

if(price > Ask) && if(price < Bid) sırasıyla alış ve satışlar için. Yoksa başka seçenekler var mıydı? Artık başka hata yok. Ancak yine de daha deneyimli bir programcının fikrini duymak isterim.

Neden: