MQL5'te birlikte öğrenme ve yazma - sayfa 24

 

Bu özellik herkese neyi açıklıyor?

int OpenSell(double volume,int slippage=10,string comment="Open Short EUR/USD (Sell)",int magic0=102406)

{

MqlTradeRequest my_trade;

MqlTradeResult my_trade_result;

my_trade.action=TRADE_ACTION_DEAL;

my_trade.symbol=Symbol();

my_trade.volume=NormalizeDouble(hacim,1);

my_trade.price=NormalizeDouble(Teklif,_Digits);

my_trade.sl=NormalizeDouble(Teklif+StopLoss*_Point,_Digits);

my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);

my_trade.deviation=slippage;

my_trade.type=ORDER_TYPE_SELL;

my_trade.type_filling=ORDER_FILLING_AON;

my_trade.comment=yorum;

my_trade.magic=sihir;


ResetLastError();

if(OrderSend(my_trade,my_trade_result))

{

time_oc=ZamanYerel();

md=0;

Print(" İşlem sonuç kodu - ",my_trade_result.retcode);

}

başka

{

Print("İşlem sonuç kodu - ",my_trade_result.retcode);

Print("Sıra açma hatası = ",GetLastError());

}

dönüş(0);

}

OnTick() prosedüründe

...

OpenSell(Lot,10,"EUR/USD (Sat)",102406);

...

başlangıçta:

çift StopLoss=250,

Kâr Al=1400;

dış çift Lot = 0.1;

Test sonuçlarında -220$ ne olacak?

<TARİH> <BALANS> <ÖKAYNAK> <MARJ DÜZEYİ>

01.01.2010   0:00:00 10000 10000 0

11.01.2010   2:57:00 9779.29 9841.92 6827

15.01.2010   16:00:00 9829.8 9941.9 6857

22.01.2010 1 4:32:00 10124.1 10135.9 7167

26.01.2010   2:14:00 10048.6 10048.6 0

26.01.2010   4:06:00 10048,6 10038,4 7099

27.01.2010   21:12:00 10188.5 10188.5 0

29.01.2010   2:16:00 10188.5 10308 7346

29.01.2010   7:14:00 10188.5 10277.4 7324

04.02.2010   22:05:00 10418.63 10480.83 7592


Eğer yanılıyorsam, burnunla beni dürt.

Bu danışmanı görmene izin vermeyeceğim. Bai'deki işlev benzer ...

Pozisyonu karşı emirle kapatıyorum.

 

TAMAM. Burada çığlık attım. Ben sadece dili öğreniyorum. Birini kırdıysam, özür dilerim. Çalışacağım ve sorunu arayacağım. Büyük olasılıkla bu benim hatam, ancak gerçekten yüksek kaliteli mql5 Uzman Danışmanları yapmayı öğrenmek istiyorum. Çok iyi sistem, ama ... şu ana kadar sorunlarım var.

20 danışman mql4'ü sorunsuz bir şekilde sürmesine rağmen.

 
Khomtchenko :
...
Belirtilen dönem için işlemlerin tarihçesini vermek daha iyidir ve bu rakamların nereden alındığı bilinmiyor. O zaman belki bu kaybın nereden geldiği anlaşılacaktır.
 

Yavaş yavaş "Dosya işlemleri" bölümünü incelemeye başladım. Söylesene, MQL5'te dosyalarla çalışma konusunda herhangi bir eğitim var mı?

 

Belirli bir sihirle tüm siparişler nasıl silinir?

Bunun için İspanyolcam var. iki işlev, check_orders def ile siparişleri kontrol eder. magic ve remove_sl şunları kaldırır:

 void remove_sl()
     {
       int counter01;
       ulong counter02;
       while (check_orders()== true )
        {
         for (counter01= 0 ; counter01< OrdersTotal (); counter01++)
           {
            counter02= OrderGetTicket (counter01);
             if ( OrderGetInteger ( ORDER_MAGIC )!=magick)
               continue ;
            remove_request.action= TRADE_ACTION_REMOVE ; remove_request.order=counter02;
             if ( OrderCheck (start_request,check_result)== true )
               OrderSend (start_request,trade_result);
           }
        }
     }



bool check_orders()
     {
      int counter01;
      bool order_exist=false;
      for(counter01=0; counter01<OrdersTotal(); counter01++)
        {
         OrderGetTicket(counter01);
         if(OrderGetInteger(ORDER_MAGIC)==magick)
           {
            order_exist=true;
            break;
           }
        }
      return(order_exist);
 

Sorun, EA günlüğünde aşağıdaki satırların görünmesidir:

2011.05.11 21:40:19 İşlemler '726238' : başarısız iptal #4375237 siparişi 0,00000'de 0,00 satın al [Geçersiz istek]
onlar. ticaret sunucusuna, bir emri silme talebiyle birlikte ek talepler var, silme talebi zaten gönderilmiş.

 

Bence bir pozisyonu kapatıp açmakla ilgili bir sorunum var.

Her nasılsa, 0.1 lot pozisyonu yerine, aslında birden fazla lotum var. Görünüşe göre, bir sembolün konumları örtüşüyor ve konumun hacmi büyüyor. Yukarıdaki sorunları büyük duraklamalar ve testlerde büyük bir farkla açıklamanın tek yolu budur. Bu, açık işlemlerin varlığını doğru bir şekilde analiz etmediğim veya izleri doğru kapatamadığım anlamına gelir.

Bir sembolde açık pozisyon olup olmadığını belirlemek için kullandığım prosedür:

int Total()

{

sayı=0;

(i=0; i<=KonumlarToplam(); i++) için

{

if (PositionGetSymbol(i)==_Symbol) {count++;}

}

dönüş(sayım);

}

Tabii ki, fonksiyon ya 0 ya da 1 döndürür.

Siparişleri açmak için aşağıdaki girişi kullanıyorum:

if(Toplam()<1)

{

if (#bir çeşit gösterge kontrolü#) OpenBuy(Lots,10,"EUR/USD (Satın Al)",102406);

if (#bir çeşit gösterge kontrolü#) OpenSell(Lots,10,"EUR/USD (Sat)",102406);

}

Al ve sat gibi açıyorum:

int OpenSell(double volume,int slippage=10,string yorum="Açık Kısa EUR/USD (Sat)",int magic0=102406)

{

MqlTradeRequest my_trade;

MqlTradeResult my_trade_result;

my_trade.action=TRADE_ACTION_DEAL;

my_trade.symbol=Symbol();

my_trade.volume=NormalizeDouble(hacim,1);

my_trade.price=NormalizeDouble(Teklif,_Digits);

my_trade.sl=NormalizeDouble(Teklif+StopLoss*_Point,_Digits);

my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);

my_trade.deviation=slippage;

my_trade.type=ORDER_TYPE_SELL;

my_trade.type_filling=ORDER_FILLING_AON;

my_trade.comment=yorum;

my_trade.magic=sihir;


ResetLastError();

if(OrderSend(my_trade,my_trade_result))

{

time_oc=ZamanYerel();

md=0;

Print(" İşlem sonuç kodu - ",my_trade_result.retcode);

}

başka

{

Print("İşlem sonuç kodu - ",my_trade_result.retcode);

Print("Sıra açma hatası = ",GetLastError());

}

dönüş(0);

}

Ana prosedürdeki anlaşmaları aynı şekilde kapatıyorum:

if (Toplam()>0) TryToClose();

TriToClose şu şekildedir:

int TryToClose()
{
(i=0; i<=KonumlarToplam(); i++) için
{
if (PositionGetSymbol(i)==_Symbol)
{
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
if(#bir çeşit gösterge kontrolü#) OpenSell(Lots,10,"EUR/USD (Sat)",102406);
if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
if(#bir çeşit gösterge kontrolü#) OpenBuy(Lots,10,"EUR/USD (Satın Al)",102406);
}
}
dönüş(0);

}

Göstergenin kontrolü aşağıdaki gibidir - bir Alış pozisyonu olması gerekiyorsa, ancak bir Satış pozisyonu varsa, o zaman bir Alış yaparız.

Nerede hata yaptım. Neden artan pozisyonlar alıyorum.

 
Khomtchenko :

Kodu SRC düğmesi aracılığıyla yapıştırın

Будет читабельнее
MT4 siparişi ile MT5 siparişi arasındaki farkları biliyor musunuz?
 

Mql4'te, emirler işlem görebilir veya beklemede olabilir.

mql5'te bir sipariş bekleyen bir anlaşmadır. Piyasaya girmek zaten bir pozisyon açmaktır . Bir emir tetiklendiğinde, bir pozisyon açılır. Bir sembol için bir pozisyon ve istediğiniz kadar emir olabilir.

Спасибо за подсказку
 

Herkes bana aptallığı ima ediyor. Bırak aptal olayım. Pekala, hatalarımı bul ki onları düzeltebileyim.

 
Khomtchenko :

Herkes bana aptallığı ima ediyor. Bırak aptal olayım. Pekala, hatalarımı bul ki onları düzeltebileyim.

Hiçbir şey ima etmiyorum, sadece koştum ve en sık sebebinin ne olduğunu sordum, eğitim seviyenizi bilmiyorum.

Uzun zamandır buradayım, birçok kişi hakkında fikrimi çoktan oluşturdum (herkes kendi yolunda güçlü), henüz seni tanımıyorum, bu yüzden hiçbir şeye ipucu vermeyeceğim.


Verilen parçalar için stratejinin genel resmini göremiyorum. Pozisyonları sıraladığınız gerçeğine bakılırsa, strateji çoklu para birimidir.

Ama nedense sadece bir enstrüman kaydettiniz, eğer sadece bir enstrüman varsa, o zaman neden pozisyonlar arasında geçiş yapıyorsunuz?

Not: Aracı biliyorsanız, o zaman bir pozisyon aramak için tüm pozisyonları gözden geçirmeniz gerekmez, sadece bu işlevi kullanın:

 bool    PositionSelect (
   string   symbol     // имя инструмента
   );