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

 
sss2019 :

Ama bana bu durum için bir danışman yazmanın nasıl daha mantıklı olacağını söyleyin:

Danışmanın anlaşmaları açacağı üç döviz çifti vardır ve aynı zamanda danışman yalnızca bir grafiğe eklenir ve diğer ikisinde kendi başına, genel olarak çok para biriminde çalışır.

İkinci koşul, herhangi bir döviz çifti için fiyat belirli bir seviyeye ulaştığında bir anlaşma açılır. Bir seferde sadece bir ticaret açılabilir.

Anlaşma kapanır kapanmaz EA, fiyat yaklaşmışsa herhangi bir çift için yeniden anlaşma açabilir.

Bunu bu şekilde yaptım, değişkenin değeri false iken statik bir değişken belirledim - anlaşmaların açılmasına izin veriliyor ve herhangi bir çift için bir sipariş açılır açılmaz değişken true değerini alıyor. Anlaşma kapanır kapanmaz ve for döngüsü birden fazla anlaşma bulamazsa, değişken tekrar false değerini alır.

Ve örneğin, çiftlerin her biri için yalnızca bir işlem açılacaksa, her çiftin kendi değişkeni olmalıdır.

Bu soruna daha rasyonel bir çözüm var mı?


bunun için siparişin "Sihir" gibi bir parametresi vardır - sadece belirli bir sihirle siparişleri sayın ve işlemlere izin verin veya yasaklayın.
 

Siparişler nasıl doğru şekilde kapatılır? ve onlar hakkında bilgi nasıl toplanır?

Aptalca sorular için elbette şimdiden özür dilerim) Sonraki metni buraya yazdım. algoritma: Açılış yukarı fraktalın altındayken ve yukarı fraktalın üzerinde kapandığında bir alış pozisyonu ve mum aşağı fraktalın üzerinde açılıp aşağıda kapandığında bir satış pozisyonu ve TÜM pozisyonları kapatmak için bir koşul daha açmak istiyorum: eğer 85 puan eksiliyorlar veya sipariş 38 mum sırasında açılmışsa (sabit S.) Görünüşe göre bunu buraya yazdım, AMA, testi yaptığımda, sadece bir tür vahşi açık ve kapalı ızgara var diğer bir deyişle, hiçbir şeyin kapanmadığı hissine kapılıyorum, siparişlerin basitçe damgalandığı ve hepsi bu ve genel olarak, siparişleri bir şekilde yanlış ele aldığımı, yanlış bir şekilde hareket ettiğimi hissediyorum. ve sonuç olarak, onları kapatmıyorum)) kapatmanın atlamaması için onları nasıl doğru kapatacağımı söyle? ve bu koddaki hata nerede. Peki, ya da örneğin, tüm bu işlemlerin yeterince yapıldığı bir programın bir iş parçacığını yapabilirsiniz. Şimdiden teşekkür ederim!!)


extern int S=38;//pozisyonun kapatılacağı mum sayısı
extern int SL=85;//durdur, pozisyonların yine de kapatılacağı
harici int YÜKSEK=0; //ekstremumları aramak için hangi zaman dilimi kullanılacak (5 veya 1 veya 0(D1))
harici intl=1; // takas edilecek lot sayısı
int kitle düzeni[30][30]; // burada AÇIK lotlarla ilgili veriler var
int uyuşukluk=1; // dizideki öğenin sayısı, hangi acc. açık arsa
int i=0;
int bilet=0;
intx=0;
ikiye katlama,yukarı=0;
çift yüksekH1,düşükH1=0;

int başlangıç()

{
if(Saat()>x)
{
aramaH1();
yukarı=yüksekH1;
aşağı=düşükH1;
ben++;
}
//----
if(Open[1]<up && Close[1]>yukarı)//mum açılışta daha düşük ve kapanışta yukarı fraktal seviyeden daha yüksekse, o zaman
{
bilet=OrderSend(Symbol(),OP_BUY,l,Bid,5,Bid-SL*Point,NULL);
i=0;
veri kaydet();
}
if(Open[1]>down && Close[1]<down)//eğer mum açılışta daha yüksek ve kapanışta aşağı fraktal seviyeden daha düşükse, o zaman
{
bilet=SiparişGönder(Symbol(),OP_SELL,l,Sor,5,Sor+SL*Nokta,NULL);
i=0;
veri kaydet();
}
if(i==S)
{
closeAllticket();
closeAllPos();
}
ben++;
//----
x=Saat();
if(Saat()==23)
x=-1;
dönüş(0);
}
//+------------------------------------------- --------------------+
void closeAllticket()
{
for(int j=0;j<=numb;j++)
{
OrderClose(kitle[j][0],l,Ask,5);
SiparişKapat(kitle[j][0],l,Teklif,5);
}
uyuşukluk=0;
}
geçersiz closeAllPos()
{

for(int j=0;j<=SiparişlerToplam();j++)
{
OrderSelect(j,SELECT_BY_POS);
OrderClose(OrderTicket(),l,Ask,5);
OrderClose(OrderTicket(),l,Bid,5);
}
}
void searchH1()//fraktal arama fonksiyonu
{
if(iHigh(Symbol(),PERIOD_H1,3)>iHigh(Symbol(),PERIOD_H1,2) && iHigh(Symbol(),PERIOD_H1,3)>iHigh(Symbol(),PERIOD_H1,1) && iHigh(Symbol( ),PERIOD_H1,3)>iHigh(Symbol(),PERIOD_H1,4) && iHigh(Symbol(),PERIOD_H1,3)>iHigh(Symbol(),PERIOD_H1,5))
highH1=iYüksek(Symbol(),PERIOD_H1,3);

if(iHigh(Symbol(),PERIOD_H1,3)<iHigh(Symbol(),PERIOD_H1,2) && iHigh(Symbol(),PERIOD_H1,3)<iHigh(Symbol(),PERIOD_H1,1) && iHigh(Symbol( ),PERIOD_H1,3)<iYüksek(Symbol(),PERIOD_H1,4) && iYüksek(Symbol(),PERIOD_H1,3)<iYüksek(Symbol(),PERIOD_H1,5))
lowH1=iYüksek(Symbol(),PERIOD_H1,3);
dönüş(0);

}

void saveata() // veri dizisine kaydetme programı
{

OrderSelect(bilet,SELECT_BY_TICKET);
massorder[numb][0]=OrderTicket();
massorder[numb][1]=OrderOpenPrice();
massorder[numb][2]=OrderStopLoss();
massorder[numb][3]=OrderTakeProfit();
if(OrderType()==OP_BUY)
kitle düzeni[numb][4]=0;
if(OrderType()==OP_SEL)
kitlesel[numb][4]=1;
uyuşmuş++;

}
 
Qwertee :

Siparişler nasıl doğru şekilde kapatılır? ve onlar hakkında bilgi nasıl toplanır?

Aptalca sorular için elbette şimdiden özür dilerim) Sonraki metni buraya yazdım. algoritma: Açılış yukarı fraktalın altındayken ve yukarı fraktalın üzerinde kapandığında bir alış pozisyonu ve mum aşağı fraktalın üzerinde açılıp aşağıda kapandığında bir satış pozisyonu ve TÜM pozisyonları kapatmak için bir koşul daha açmak istiyorum: eğer 85 puan eksiliyorlar veya sipariş 38 mum sırasında açılmışsa (sabit S.) Görünüşe göre bunu buraya yazdım, AMA, testi yaptığımda, sadece bir tür vahşi açık ve kapalı ızgara var diğer bir deyişle, hiçbir şeyin kapanmadığı hissine kapılıyorum, siparişlerin basitçe damgalandığı ve hepsi bu ve genel olarak, siparişleri bir şekilde yanlış ele aldığımı, yanlış bir şekilde hareket ettiğimi hissediyorum. ve sonuç olarak, onları kapatmıyorum)) kapatmanın atlamaması için onları nasıl doğru kapatacağımı söyle? ve bu koddaki hata nerede. Peki, ya da örneğin, tüm bu işlemlerin yeterince yapıldığı bir programın bir iş parçacığını yapabilirsiniz. Şimdiden teşekkür ederim!!)


durağın en başında belirttiğiniz küresel değişikliklerde

 extern int MagicNumber = 11113;
int cntBuy = 0 , cntSell = 0 , totalBuy, totalSell;

siparişleri açmadan önce:

           totalBuy = CountTradesBuy();
           totalSell = CountTradesSell();

açılış sinyalinde

 if ((Open[ 1 ]<up) && (Close[ 1 ]>up) && (totalBuy < 1 ) && (totalSell < 1 ))

if ((Open[ 1 ]>down) && (Close[ 1 ]<down) && (totalBuy < 1 ) && (totalSell < 1 ))

danışmanın sonunda

 int CountTradesBuy() {
   int countBuy = 0 ;
   for ( int tradeBuy = OrdersTotal () - 1 ; tradeBuy >= 0 ; tradeBuy--) {
       OrderSelect (tradeBuy, SELECT_BY_POS, MODE_TRADES);
       if ( OrderSymbol () != Symbol () || OrderMagicNumber () != MagicNumber) continue ;
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
         if ( OrderType () == OP_BUY) countBuy++;
   }
   return (countBuy);
}

int CountTradesSell() {
   int countSell = 0 ;
   for ( int tradeSell = OrdersTotal () - 1 ; tradeSell >= 0 ; tradeSell--) {
       OrderSelect (tradeSell, SELECT_BY_POS, MODE_TRADES);
       if ( OrderSymbol () != Symbol () || OrderMagicNumber () != MagicNumber) continue ;
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
         if ( OrderType () == OP_SELL) countSell++;
   }
   return (countSell);
}

hiçbir şey unutmadı

 
belck :


durağın en başında belirttiğiniz küresel değişikliklerde

siparişleri açmadan önce:

açılış sinyalinde

danışmanın sonuna kadar

hiçbir şeyi unutma



Yazdıklarının hepsini ekledim ama yine de nedense değişen bir şey yok. genel olarak, sonuç neyse o oldu ve yine de öyle kaldı, siparişler uzun bir süre açık kalıyor ve S çubuklarından sonra onları kapatmam gerekiyor, sorun ne????????? ???????

Dosyalar:
ikdgna.mq4  7 kb
 
Qwertee :


Yazdıklarının hepsini ekledim ama yine de nedense değişen bir şey yok. genel olarak sonuç neyse o oldu ve yine de öyle kaldı, siparişler uzun süre açık kalıyor ve S çubuklarından sonra onları kapatmam gerekiyor, sorun ne????????? ???????

açılış emirlerinden önce çağrı kapatma emirleri ayarlanmalıdır. Bunların bir kısmını kapattım. muhtemelen yararlı:

en küreselden önce

 #include <stdlib.mqh>


siparişleri açmadan önce şöyle arayın:

 if ()
   {
    CloseAllBuy();
    }
    
       
   if () 
   {
   CloseAllSell();
   }

или

if ()
   {
    CloseAllBuy();
    CloseAllSell();
     }

ve bu danışmanın en sonunda

 void CloseAllBuy()
{
         int i;
         int Orders = OrdersTotal ();
         bool result;
         datetime begin;
        
         if (Orders > 0 )
        {
                 for (i = Orders- 1 ; i >= 0 ; i--)
                {
                         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) )
                        {
                                 if ( OrderSymbol () == Symbol () && OrderType () == OP_BUY && OrderMagicNumber () == MagicNumber)
                                {
                                         RefreshRates ();
                                        begin = TimeCurrent ();
                    result = OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble (Bid, Digits ), slip, Yellow ); // закрываем все встречные ордера
                                         while (!result && TimeCurrent () - begin <= 60 && ! IsTesting ())
                                        {
                                                 Sleep ( 100 );
                                                 RefreshRates ();
                    result = OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble (Bid, Digits ), slip, Yellow ); //закрываем все встречные ордера
                                        }
                                         if (!result)
                                        {
                                                 int error = GetLastError ();
                                                 Print ( "Ошибка закрытия ордера BUY #" + OrderTicket () + " " + ErrorDescription(error));
                                        }
                                }
                        }
                         else
                        {
                                 Print ( "Не удалось выбрать открытый ордер:" + ErrorDescription(error));
                        }
                }
        }
}

void CloseAllSell()
{
         int i;
         int orders = OrdersTotal ();
         bool result;
         datetime begin;
        
         if (orders > 0 )
        {
                 for (i = orders- 1 ; i >= 0 ; i--)
                {
                         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) )
                        {
                                 if ( OrderSymbol () == Symbol () && OrderType () == OP_SELL && OrderMagicNumber () == MagicNumber)
                                {
                                         RefreshRates ();
                                        begin = TimeCurrent ();
                    result = OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble (Ask, Digits ), slip, Yellow ); // закрываем все встречные ордера
                                         while (!result && TimeCurrent () - begin <= 120 && ! IsTesting ())
                                        {
                                                 Sleep ( 100 );
                                                 RefreshRates ();
                   result = OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble (Ask, Digits ), slip, Yellow ); //закрываем все встречные ордера
                                        }
                                         if (!result)
                                        {
                                                 int error = GetLastError ();
                                                 Print ( "Ошибка закрытия ордера SELL #" + OrderTicket () + " " + ErrorDescription(error));
                                        }
                                }
                        }
                         else
                        {
                                 Print ( "Не удалось выбрать открытый ордер:" + ErrorDescription(error));
                        }
                }
        }
}

 

Uzmanlara soru, testin belirli bir süresi için minimum lot sayısı gibi danışmanlar için herhangi bir kriter var mı? Kayıp oranı vs?

Sadece 2 danışman ve yılda 100 işlem yapıyorlar, diğer 30 genel olarak... (sırasıyla 15, 30 zaman aralığı). Kârlılık iyi, demodaki gerçek alıntılardaki ilk test şimdi test etmeye değer ... ama biri bana MT4'ten daha iyi testler olduğunu söyleyebilir mi?

 
Bana koşulu nasıl yerine getireceğimi söyle? Fiyat 1.2550'ye ulaşır ulaşmaz cari fiyattan alım emri açma şartı vardır. Fiyat 1.2550'ye eşit veya daha büyük olduğunda emrin açıldığı ve emir açıldığında, statik değişkenin emirler 0 olana kadar yeni emirlerin açılmasını engellediği ortaya çıkıyor. emir kapatılır, bu sihirle başka emir kalmaz, daha sonra açma yasağı kaldırılır ve hemen yeni bir emir açılır, ancak fiyat bu düşüşü çoktan bırakmıştır. Danışmanın, bekleyen emirleri değil, fiyat seviyeye ulaştığında piyasa emirlerini açması gerekir.
 

Tüm uzmanlara merhaba)))

öyle bir hindi var ki son iki fraktaldan yola çıkarak bir trend çizgisi çiziyor ama bunu bir "teyit edilmemiş fraktal"a göre çiziyor, yani. ikinci çubuk fraktaldan sonra henüz oluşmamıştır ve çizgi zaten çizilmiştir. İlk çubuktan sonra değil, ikinci çubuktan sonra nasıl çizilir? Türkiye sekmesinde.

Dosyalar:
 
rigc :

Tüm uzmanlara merhaba)))

öyle bir hindi var ki son iki fraktaldan yola çıkarak bir trend çizgisi çiziyor ama bunu bir "teyit edilmemiş fraktal"a göre çiziyor, yani. ikinci çubuk fraktaldan sonra henüz oluşmamıştır ve çizgi zaten çizilmiştir. İlk çubuktan sonra değil, ikinci çubuktan sonra nasıl çizilir? Türkiye sekmesinde.


Denemek
Dosyalar:
 
Figar0 :

Denemek
hiç çizmiyor