Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 1100

 

Sevgili programcılar, lütfen aynı anda birden fazla işlem dizisi açma yasağının oluşturulmasına yardımcı olun (bir seri, emrin zararda veya sıfırda kapanması ve ardından aynı enstrüman için bir sonraki işlemin açılmasıdır, ancak artırılmış bir lot), yani bir dizi işlem açılırsa ikincisi ve sonraki işlem diğer enstrümanlar için yasaklanır (bot aynı anda farklı enstrümanlar üzerinde çalışır). Bunun terminalin global değişkeni üzerinden yapılması gerektiğini düşünüyorum ancak yeterli bilgi ve tecrübeye sahip değilim, MQL öğrenmeye yeni başladım. Bu bir ikili opsiyon danışmanıdır. İşte kod

dış çift Lot = 1; // Çok güzelsin

harici intExp = 1; // Son

harici int Bekle = 1; // Bir yöndeki mum sayısı

extern int Zaman Aşımı = 1; // Zaman aralığı

dış çift Çarpan = 3; // Çarpan

dış int kayma = 5; // kayma

harici int Büyü = 2090; // Büyü


int bilet, Tür;

çift fiyat, çok;

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

//| uzman başlatma işlevi |

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

int OnInit()

{

dönüş(INIT_SUCCESSED);

}

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

//| Uzman başlatmasızlaştırma işlevi |

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

geçersiz OnDeinit(const int nedeni)

{

}

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

//| Uzman onay işlevi |

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

geçersiz OnTick()

{

// --------------- İşlemlerin açılması ---------------

if (OrdersTotal() == 0) // Sipariş sayısı sıfıra eşit olmalıdır

{

if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))

// Son anlaşma kârsızsa, aynısı açılır, ancak artan lotla

{

Tür = TypeLastHistOrder();

if (Tip == OP_BUY) Fiyat = Sor;

if (Tür == OP_SELL) Fiyat = Teklif;

Parti = NormalizeDouble(LotsLastHistOrder()*Çarpan, 2);

bilet = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)

// Son ticaretin karı sıfırsa, aynısını aç

{

Tür = TypeLastHistOrder();

if (Tip == OP_BUY) Fiyat = Sor;

if (Tür == OP_SELL) Fiyat = Teklif;

Parti = NormalizeDouble(LotsLastHistOrder(), 2);

bilet = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > FiyatOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

|| CountHistTrades() == 0)// Son işlem karlıysa, sipariş açılır

{

if (SignalBuy() && OrdersTotal() == 0)

{

bilet = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (SignalSell() && OrdersTotal() == 0)

{

bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);

Yorum ("PriceCloseLastHistOrder(OP_BUY)= ", PriceCloseLastHistOrder(OP_BUY), "PriceCloseLastHistOrder(OP_SELL)=",

FiyatCloseLastHistOrder(OP_SELL) );

}

}

}

}

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

int CountTrades(int type = -1) // İşlem sayısını belirleme

{

int cnt = 0;

for (int i=OrdersTotal()-1; i>=0; i--) // Döngü kesinlikle tüm açık siparişlerden geçer, i -- siparişin seri numarası

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // Fonksiyon, piyasada i sıralı bir emir olup olmadığını kontrol eder,

// varsa aşağıdaki koşullar kontrol edilir...

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)) // Eğer Symbol,

// emrin açıldığı, mevcut sembole eşittir ve emrin büyüsü, mevcut danışmanın ayarlarındaki sihire eşittir ve

// sipariş türü eşittir değer türü (veya tür == -1 (siparişleri saymak için hangi türün gerekli olduğu önemli değilse))

cnt++; // cnt değişkenine 1 eklenir ve döngünün sonunda cnt zaten işlem sayısına eşit olur,

// belirli bir türdeki cari döviz çifti için cari danışman tarafından açılır

}

}

dönüş(cnt); // cnt değişkeninin değerini döndürür

}

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

int CountHistTrades(int tipi = -1)

{

int cnt = 0;

for (int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

cnt++;

}

}

dönüş(cnt);

}

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

bool SignalBuy()

{

for (int i=1; i<=Bekle; i++)

{

if (Close[i] > Open[i]) return(false);

}

if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Bekle || (Bekle == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

dönüş(yanlış);

}

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

bool SignalSell()

{

for (int i=1; i<=Bekle; i++)

{

if (Kapat[i] < Aç[i]) dönüş(yanlış);

}

if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Bekle || (Bekle == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

dönüş(yanlış);

}

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

tarihsaat TimeLastHistOrder(int tipi = -1)

{

tarihsaat sonzaman = 0;

tarihsaat açıksaat=0;


for (int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderCloseTime() > geçen sefer)

{

lasttime = OrderCloseTime();

açılış zamanı = OrderOpenTime();

}

}

}

}

dönüş (açık zaman);

}

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

intTypeLastHistOrder()

{

tarihsaat = 0;

int türü = -1;

for (int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

{

if (OrderCloseTime() > zaman)

{

zaman = OrderCloseTime();

type = OrderType();

}

}

}

}

dönüş(tür);

}

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

double LotsLastHistOrder(int tipi = -1)

{

tarihsaat = 0;

çift lot = 0;

for (int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderOpenTime() > zaman)

{

zaman = OrderOpenTime();

lot = OrderLots();

}

}

}

}

dönüş(lot);

}

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

double PriceCloseLastHistOrder(int tipi = -1)

{

tarihsaat = 0;

çift fiyat = 0;

for (int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderCloseTime() > zaman)

{

zaman = OrderCloseTime();

fiyat = OrderClosePrice();

}

}

}

}

iade(fiyat);

}

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

double PriceOpenLastHistOrder(int tipi = -1)

{

tarihsaat = 0;

çift fiyat = 0;

for (int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))

{

if (OrderCloseTime() > zaman)

{

zaman = OrderCloseTime();

fiyat = OrderOpenPrice();

}

}

}

}

iade(fiyat);

}

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

 
Merhaba meslektaşlarım!

Programlama yaparken bir sorum vardı: Expert Advisor'da sunucu zamanını milisaniye hassasiyetinde bir şekilde almak mümkün müdür?
Örneğin, şunu elde ederiz: 09/23/2016 14h. : 53dk : 54000 milisaniye? Bu tam olarak 54 saniye, 000 m/sn.
 
e-partner :
Merhaba meslektaşlarım!

Programlama yaparken bir sorum vardı: Expert Advisor'da sunucu zamanını milisaniye hassasiyetinde bir şekilde almak mümkün müdür?
Örneğin, şunu elde ederiz: 09/23/2016 14h. : 53dk : 54000 milisaniye? Bu tam olarak 54 saniye, 000 m/sn.

İlgi Sor. Ne demek istiyorsun , sunucunun bilinen son saatini, son alıntı TimeCurrent()'in varış saatini veya sunucudaki geçerli saati belirtin?

Eğer TimeCurrent() ise, yeni bir alıntıya sahip bir paketin İnternet üzerinden sunucudan terminale 10-500 ms içinde seyahat ettiği ve bu sürenin paketten pakete değiştiği göz önüne alındığında, bunun kullanımı nedir. Ek olarak, son teklifin gelişinin ne olduğu kesin değildir, birkaç kaynaktan sunucuya giderlerse, likidite sağlayıcıları, daha sonra işlenir, ardından sunucu yeni bir onay gönderir. Ayrıca sunucunun sistem zamanlayıcısının astronomik zamanla nasıl senkronize olduğu da bilinmiyor. 01/09/2014 04:15 - 06:15 Moskova saati (Perşembe, işlem günü) Bunu astronomik değil, 31 şirket ortalamasından bir sapma olarak anladım. Zamandaki 25 nokta için rakam bu sapmaları gösterir (ms olarak değil, saniye olarak):

Ve sunucudan gelen verilere göre milisaniye cinsinden bir şey bulmanın amacı nedir?

İkinci seçenek daha açıktır. Eğer bilgisayarınızda astronomik saat ile zaman senkronizasyonu bildiğiniz bir hata ile yapılıyorsa, sunucunun çalıştığı lokasyonda astronomik saat aynı hata ile (bölge farkı dikkate alınarak) bilinir. Ama neden o...

 

Strateji test ediciden bir yerde optimizasyon gitti. Küçük kargaların hiçbir değeri yok, anlayamıyorum. MT4 yapı 1010. Windows 8.1.

Optimizasyonu nasıl etkinleştireceğimi söyle.

Ekran görüntülerini ekliyorum. Optimize Et düğmesi eksik.

Dosyalar:
desktop.zip  129 kb
 
MT4 b1010'um neden geçmiş verilerde hata ayıklamaya izin vermiyor (düğme ve menü öğesi etkin değil)? MT5'te her şey yolunda.
 
Patamushta geliştiricileri yasaklandı.
 
int Büyü;
int Kayma = 5, stopL1 = 50, takeP1 = 20;
int trendi,TicketS,TicketB;
çift rsi,TP,SL;
//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
int OnInit()
{
if(Rakamlar == 3 || Rakamlar == 5)
{
kayma *= 10;
stopL1 *= 10;
alP1 *= 10;
}

dönüş(INIT_SUCCESSED);
}
//+------------------------------------------- --------------------+
//| Uzman başlatmasızlaştırma işlevi |
//+------------------------------------------- --------------------+
geçersiz OnDeinit(const int nedeni)
{

}
//+------------------------------------------- --------------------+
//| Uzman onay işlevi |
//+------------------------------------------- --------------------+
geçersiz OnTick()
{
çift ödülBuy = FindLastOrderPrise(OP_BUY);
çift ödülSel = FindLastOrderPrise(OP_SELL);
double frezeelevl = MarketInfo(OrderSymbol(),MODE_FREEZELEVEL);
rsi = iRSI(Symbol(), PERIOD_D1,7 ,PRICE_CLOSE,0);
eğilim = WhatTrend();
if (CountTrades() == 0)
{
if(trend == 1 && rsi <=30)
{
if(OrderSend(Symbol(),OP_BUYLIMIT,0.10,Ask,Slippage,0,0,"ilk sipariş seti",Magik,0)== true)
{
TicketB = FindLastTicket(OP_BUY);
if(TicketB>0)
{
SL = ödülBuy + NormalizeDouble(takeP1 * Point,Rakamlar);
TP = ödülBuy - NormalizeDouble(stopL1 * Point,Rakamlar);
if(OrderModify(TicketB,priseBuy,SL,TP,0)== doğru)
Yorum("Yaşasın");
}

}
}// if(trend == 1 && rsi <=30)
else if(trend == 2 && rsi >= 70)
{
if(OrderSend (Symbol(),OP_SELLLIMIT,0.10,Bid,Slippage,0,0,"ilk sipariş seti",Magik,0)== doğru)
{
for(int i = OrdersTotal()-1;i >0;i--)
{
OrderSelect(i,SELECT_BY_TICKET,MODE_TRADES);
if (OrderType()== OP_SELL && OrderMagicNumber() == Magik)
{
double sl = OrderOpenPrice() + NormalizeDouble(stopL1 * Nokta,Rakamlar);
double tp = OrderOpenPrice() - NormalizeDouble(takeP1 * Point,Digits);
if(OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0)==true)break;
yoksa devam;
}
}
}
}
}//if (CountTrades() == 0)

}

Yetkili programcılardan benim hatamın ne olduğunu açıklamalarını rica ediyorum? sıralama neden değiştirilmiyor!!! ve derleyici aynı anda herhangi bir hata vermiyor

 
Ders kitabını inceledim.Okudum ve ana hatlarıyla belirttim..Hataları özellikle belirtebilirsiniz..çünkü derleyici hata vermiyor ve test cihazında hata yok.ama sıralama değiştirilmiyor.değişiklik sırası gibi programda hiç görünmüyor
 
burbur87 :
Ders kitabını inceledim.Okudum ve ana hatlarıyla belirttim..Hataları özellikle belirtebilirsiniz..çünkü derleyici hata vermiyor ve test cihazında hata yok.ama sıralama değiştirilmiyor.değişiklik sırası gibi programda hiç görünmüyor

OrderSend()'in ne döndürdüğünü dikkatlice okuyun

 if ( OrderSend ( Symbol (),OP_SELLLIMIT, 0.10 ,Bid,Slippage, 0 , 0 , "первый ордер сел установлен" ,Magik, 0 ) > 0 )

Ve evet, bunu yapardım:

   int ticket= OrderSend ( Symbol (),OP_SELLLIMIT, 0.10 ,Bid,Slippage, 0 , 0 , "первый ордер сел установлен" ,Magik, 0 );
   if (ticket>= 0 )
      {
         if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
          {
             if (OrderStopLoss()== 0 || OrderTakeProfit()== 0 )
             {
               double sl = OrderOpenPrice() + NormalizeDouble (stopL1 * Point , Digits );
               double tp = OrderOpenPrice() - NormalizeDouble (takeP1 * Point , Digits );
               if (!OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp, 0 )) Print ( "Error " , GetLastError (), " modify order " ,ticket);
             }
          }
      }
 
Sepulca :

OrderSend()'in ne döndürdüğünü dikkatlice okuyun

 if (ticket>= 0 )

Ve evet, bunu yapardım:

Bir bilet sıfıra eşit olabilir mi?