Lütfen bana MT4'te bir danışmanla işlem yaparken kodu nasıl doğru yazacağımı söyleyin, ben kendim programlamada çok yeniyim.
Son kapatılan emri seçmem ve duruma göre karı karşılaştırmam gerekiyor, emrin karı 0'dan büyükse, o zaman yapacak bir şey yok, 0'dan küçükse, o zaman bir şey yap.
double GetSizeLot( double lastlot= 0 ) //Функция возвращает значение лотов
{
double Lot2,MinLots,MaxLots;
int j=OrdersHistoryTotal();
MinLots=Lots;
MaxLots=MaxLot;
if (!DynamicLot)Lot2=Lots;
if (lastlot<Lot2)lastlot=Lot2;
if ( OrderSelect (j,SELECT_BY_POS,MODE_HISTORY))
{
if (OrderProfit()< 0 ) lastlot=lastlot*Martin;
if (OrderProfit()> 0 ) lastlot=Lot2;
}
Lot2=lastlot;
if (Lot2 < MinLots) Lot2 = MinLots;
if (Lot2 > MaxLots) Lot2 = MaxLots;
return ( NormalizeDouble (Lot2, 2 ));
}
Lütfen bana MT4'te bir danışmanla işlem yaparken kodu nasıl doğru yazacağımı söyleyin, ben kendim programlamada çok yeniyim.
Son kapatılan emri seçmem ve duruma göre karı karşılaştırmam gerekiyor, emrin karı 0'dan büyükse, o zaman yapacak bir şey yok, 0'dan küçükse, o zaman bir şey yap.
Saygılarımla, İskender.
//+------------------------------------------------------------------+datetime time= 0 ; double profit= 0 ,lots= 0 ;
for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--)
if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol()== _Symbol )
if (OrderMagicNumber()==MagicNumber || MagicNumber==- 1 )
if (OrderCloseTime()>time) // находим последний в истории ордер
{
time=OrderCloseTime(); // запомним время
profit=OrderProfit(); // запомним профит
his_lt=OrderLots(); // запомним лот
}
if (profit< 0 ) //если профит меньше нуля
lots=his_lt* 2 ; // Увеличим в два раза//+------------------------------------------------------------------+
İlginçtir ki, zaman ne için, neden listedeki sonuncuyu ve hatta bir döngüyü seçtiyseniz, kapanış saatini neden hatırlıyorsunuz? Ve neden takas ve komisyonu dikkate almıyorsunuz? OrderProfit()>0 olsa bile gerçek karı negatif olabilir. Doğrudan sipariş listesiyle çalışıyorsanız, son kapanış saati için arama döngüsünün kodundan parça bırakmanıza bile gerek yoktur. Bir şey - ya güvenilirlik ve güven ya da hız. Ve bir karışımınız var.
Artyom Trishkin : İlginçtir ki, zaman ne için, neden listedeki sonuncuyu ve hatta bir döngüyü seçtiyseniz, kapanış saatini neden hatırlıyorsunuz? Ve neden takas ve komisyonu dikkate almıyorsunuz? OrderProfit()>0 olsa bile gerçek karı negatif olabilir. Doğrudan sipariş listesiyle çalışıyorsanız, son kapanış saati için arama döngüsünün kodundan parça bırakmanıza bile gerek yoktur. Bir şey - ya güvenilirlik ve güven ya da hız. Ve bir karışımınız var.
teklif ediyorsun
if ( OrderSelect (OrdersHistoryTotal(),SELECT_BY_POS,MODE_HISTORY))
Böyle yap?
Adam sadece kâr emri istedi, neden istemediği bir şeyle uğraşsın ki? Ama sana katılıyorum....
Lütfen bana MT4'te MQL4'te 20 çubuktan sonra bir açık emrin nasıl kapatılacağını, yani bir emrin nasıl açılacağını ve 20 yeni çubuğun nasıl göründüğünü söyleyin - emir kapanır. (sadece 1 sipariş her zaman açıktır). Nedense, bu kod benim için strateji test cihazında çalışmıyor, ancak çalışması gerekiyor.
bu kodun anlamı şudur: açık emir olup olmadığını kontrol edin, yoksa bir emir açın ve 1. çubuğun açılış fiyatını "z" değişkenine yazın, ardından her tik ile açılış fiyatını kontrol ediyoruz. 20. çubuk ve zamanla aynı 1. çubuk 20. olduğunda, fiyatı "z" değişkeninde kaydedilen fiyatla çakışacak ve ardından sipariş kapatılacaktır. (Tabii ki süreçte fiyat çakışmaları olabilir ama bu çok nadir olacaktır ayrıca değişkenlere 1. çubuğun bir kaç parametresini daha yazabilirsiniz)
double z; //объявление переменной//ОТКРЫТИЕ ОРДЕРАif ( OrdersTotal () == 0 ) // если нет открытых ордеров то открывать ордер
{
OrderSend ( Symbol (), OP_SELL, 0.1 , Bid, 3 , Bid+ 150 * Point , Bid- 10 * Point );
z = Open[ 1 ]; // здесь переменной "z" присваивается цена открытия 1-го бара
}
elsePrint ( "ORDER NE USTANOVLEN!!!" );
//ЗАКРЫТИЕ ОРДЕРАif (z==Open[ 20 ]) //если цена записанная в переменную "z" равна цене 20-го бара, то закрывать ордер
{
//-----------------код закрывает все ордера--------------------bool result;
int error;
while ( OrdersTotal ()> 0 )
{
if ( OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES))
{ if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)), 3 ,CLR_NONE);
if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)), 3 ,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
if (result!=TRUE) { error= GetLastError ();
Print ( "LastError = " ,error, " " , Symbol ()); }
else error= 0 ; }
elsePrint ( "Error when order select " , GetLastError ());
}
//------------конец кода закрывающего ордер------------------
}
elsePrint ( "ORDER NE ZAKRYT!!!" );
Lütfen bana MT4'te MQL4'te 20 çubuktan sonra bir açık emrin nasıl kapatılacağını, yani bir emrin nasıl açılacağını ve 20 yeni çubuğun nasıl göründüğünü söyleyin - emir kapanır. (sadece 1 sipariş her zaman açıktır). Nedense, bu kod benim için strateji test cihazında çalışmıyor, ancak çalışması gerekiyor.
bu kodun anlamı şudur: açık emir olup olmadığını kontrol edin, yoksa bir emir açın ve 1. çubuğun açılış fiyatını "z" değişkenine yazın, ardından her tik ile açılış fiyatını kontrol ediyoruz. 20. çubuk ve zamanla aynı 1. çubuk 20. olduğunda, fiyatı "z" değişkeninde kaydedilen fiyatla çakışacak ve ardından sipariş kapatılacaktır. (Tabii ki süreçte fiyat çakışmaları olabilir ama bu çok nadir olacaktır ayrıca değişkenlere 1. çubuğun bir kaç parametresini daha yazabilirsiniz)
her şeyi kendim çözdüm, int start () dışında bir değişken bildirmek zorunda kaldım - şimdi iyi çalışıyor
Tünaydın.
Lütfen bana MT4'te bir danışmanla işlem yaparken kodu nasıl doğru yazacağımı söyleyin, ben kendim programlamada çok yeniyim.
Son kapatılan emri seçmem ve duruma göre karı karşılaştırmam gerekiyor, emrin karı 0'dan büyükse, o zaman yapacak bir şey yok, 0'dan küçükse, o zaman bir şey yap.
Saygılarımla, İskender.
Tünaydın.
Lütfen bana MT4'te bir danışmanla işlem yaparken kodu nasıl doğru yazacağımı söyleyin, ben kendim programlamada çok yeniyim.
Son kapatılan emri seçmem ve duruma göre karı karşılaştırmam gerekiyor, emrin karı 0'dan büyükse, o zaman yapacak bir şey yok, 0'dan küçükse, o zaman bir şey yap.
Saygılarımla, İskender.
İlginçtir ki, zaman ne için, neden listedeki sonuncuyu ve hatta bir döngüyü seçtiyseniz, kapanış saatini neden hatırlıyorsunuz? Ve neden takas ve komisyonu dikkate almıyorsunuz? OrderProfit()>0 olsa bile gerçek karı negatif olabilir. Doğrudan sipariş listesiyle çalışıyorsanız, son kapanış saati için arama döngüsünün kodundan parça bırakmanıza bile gerek yoktur. Bir şey - ya güvenilirlik ve güven ya da hız. Ve bir karışımınız var.
teklif ediyorsun
Böyle yap?
Adam sadece kâr emri istedi, neden istemediği bir şeyle uğraşsın ki? Ama sana katılıyorum....
Lütfen bana MT4'te MQL4'te 20 çubuktan sonra bir açık emrin nasıl kapatılacağını, yani bir emrin nasıl açılacağını ve 20 yeni çubuğun nasıl göründüğünü söyleyin - emir kapanır. (sadece 1 sipariş her zaman açıktır). Nedense, bu kod benim için strateji test cihazında çalışmıyor, ancak çalışması gerekiyor.
bu kodun anlamı şudur: açık emir olup olmadığını kontrol edin, yoksa bir emir açın ve 1. çubuğun açılış fiyatını "z" değişkenine yazın, ardından her tik ile açılış fiyatını kontrol ediyoruz. 20. çubuk ve zamanla aynı 1. çubuk 20. olduğunda, fiyatı "z" değişkeninde kaydedilen fiyatla çakışacak ve ardından sipariş kapatılacaktır. (Tabii ki süreçte fiyat çakışmaları olabilir ama bu çok nadir olacaktır ayrıca değişkenlere 1. çubuğun bir kaç parametresini daha yazabilirsiniz)
Lütfen bana MT4'te MQL4'te 20 çubuktan sonra bir açık emrin nasıl kapatılacağını, yani bir emrin nasıl açılacağını ve 20 yeni çubuğun nasıl göründüğünü söyleyin - emir kapanır. (sadece 1 sipariş her zaman açıktır). Nedense, bu kod benim için strateji test cihazında çalışmıyor, ancak çalışması gerekiyor.
bu kodun anlamı şudur: açık emir olup olmadığını kontrol edin, yoksa bir emir açın ve 1. çubuğun açılış fiyatını "z" değişkenine yazın, ardından her tik ile açılış fiyatını kontrol ediyoruz. 20. çubuk ve zamanla aynı 1. çubuk 20. olduğunda, fiyatı "z" değişkeninde kaydedilen fiyatla çakışacak ve ardından sipariş kapatılacaktır. (Tabii ki süreçte fiyat çakışmaları olabilir ama bu çok nadir olacaktır ayrıca değişkenlere 1. çubuğun bir kaç parametresini daha yazabilirsiniz)
her şeyi kendim çözdüm, int start () dışında bir değişken bildirmek zorunda kaldım - şimdi iyi çalışıyor
Biraz basitleştirdim, ancak kodunuzda hala hatalar var
Çoklu para birimi danışmanı yazıyorum, ancak danışmanı farklı para birimlerine asarsam neden aynı anda farklı fiyatlar döndürdüğünü anlayamıyorum.
Kısaca, kodda:
init'te
OnTimer'da()
Bir danışmanı EURNZD'de test edersem, örneğin
2015.05.18 00:07:00 LatAsk : 1.5370
Danışmanı başka bir döviz çiftine asarsam
2015.05.18 00:07:00 LatAsk : 1.5323
değerler kökten farklıdır ve ikinci durumda, programa göre böyle bir değer en az birkaç saat olamaz
Test cihazında, tüm keneler ticaret modundadır, ana çift değilse, test cihazındaki değerler yaklaşık değerlerdir.
Bunun Meta Trade 5 olduğunu eklemeyi unuttum
İlk çıktığınızda fiyatın yanlış olduğu ortaya çıktı, testi tekrar yapın fiyat normal
Otomatik çizelge nasıl tamamen silinir?