Böyle bir şey yaptım ama işe yaramadı. sıfır gösterir.
Değeri ayarlamanız mı yoksa almanız mı gerekiyor? ObjectSetString() işlevi, bir metin değeri ayarlar ve bir bool değeri döndürür . Bu o değil. Ve döngünün başında, bence, doğru biçimlendirilmemiş ... Where ObjectsTotal() ... MT4 referansı tarafından yönlendiriliyorum. Yoksa bir MT5 kodu mu?
Değeri ayarlamanız mı yoksa almanız mı gerekiyor? ObjectSetString() işlevi, bir metin değeri ayarlar ve bir bool değeri döndürür . Bu o değil. Ve döngünün başında, bence, doğru biçimlendirilmemiş ... Where ObjectsTotal() ... MT4 referansı tarafından yönlendiriliyorum. Yoksa bir MT5 kodu mu?
İşte Metatrader5 için komut dosyasının bir parçası:
#property copyright"Copyright 2019, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//---- показывать входные параметры#property script_show_inputs//---#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade m_trade; // trading object
CSymbolInfo m_symbol; // symbol info object//+------------------------------------------------------------------+//| Enum Stop or Limit |//+------------------------------------------------------------------+enum ENUM_STOP_OR_LIMIT
{
stop= 0 , // Buy stop and Sell stop
limit= 1// Buy limit and Sell limit
};
//--- input parametersinputushort InpUpGap = 15 ; // Gap for pending orders UP from the current price (in points)inputushort InpUpStep = 30 ; // Step between orders UP (in points)inputushort InpDownGap = 15 ; // Gap for pending orders DOWN from the current price (in points)inputushort InpDownStep = 30 ; // Step between orders DOWN (in points)input ENUM_STOP_OR_LIMIT InpPending = stop; // Type of pending ordersinputuchar InpUpQuantity = 1 ; // UP quantity ordersinputuchar InpDownQuantity = 1 ; // DOWN quantity ordersinputdouble InpLots = 0.01 ; // Lotsinputushort InpStopLoss = 50 ; // Stop Loss (in points)inputushort InpTakeProfit = 50 ; // Take Profit (in points)//---ulong m_slippage= 30 ; // slippagedouble ExtUpGap= 0.0 ;
double ExtUpStep= 0.0 ;
double ExtDownGap= 0.0 ;
double ExtDownStep= 0.0 ;
double ExtStopLoss= 0.0 ;
double ExtTakeProfit= 0.0 ;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart ()
{
//---if (InpLots<= 0.0 )
{
Print ( "The \"Lots\" can't be smaller or equal to zero" );
return ;
}
//---if (!m_symbol.Name( Symbol ())) // sets symbol namereturn ;
if (!RefreshRates())
return ;
string err_text= "" ;
if (!CheckVolumeValue(InpLots,err_text))
{
Print (err_text);
return ;
}
//---if (IsFillingTypeAllowed( SYMBOL_FILLING_FOK ))
m_trade.SetTypeFilling( ORDER_FILLING_FOK );
elseif (IsFillingTypeAllowed( SYMBOL_FILLING_IOC ))
m_trade.SetTypeFilling( ORDER_FILLING_IOC );
else
m_trade.SetTypeFilling( ORDER_FILLING_RETURN );
//---
m_trade.SetDeviationInPoints(m_slippage);
m_trade.SetAsyncMode( true );
//---
ExtUpGap = m_symbol. Point () * InpUpGap;
ExtUpStep = m_symbol. Point () * InpUpStep;
ExtDownGap = m_symbol. Point () * InpDownGap;
ExtDownStep = m_symbol. Point () * InpDownStep;
ExtStopLoss = m_symbol. Point () * InpStopLoss;
ExtTakeProfit = m_symbol. Point () * InpTakeProfit;
//--- start workdouble start_price_ask=m_symbol.Ask()-ExtUpGap;
double start_price_bid=m_symbol.Bid()+ExtDownGap;
//--- set pending ordersfor ( int i= 0 ; i<InpUpQuantity; i++)
{
double price_ask = start_price_ask+i*ExtUpStep;
double price_bid = start_price_bid+i*ExtUpStep;
if (InpPending==stop)
{
double sl = (ExtStopLoss== 0.0 ) ? 0.0 : price_ask - ExtStopLoss;
double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_ask + ExtTakeProfit;
m_trade.BuyStop(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
else
{
double sl = (ExtStopLoss== 0.0 ) ? 0.0 : price_bid + ExtStopLoss;
double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_bid - ExtTakeProfit;
m_trade.SellLimit(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
}
for ( int i= 0 ; i<InpDownQuantity; i++)
{
double price_ask = start_price_ask-i*ExtDownStep;
double price_bid = start_price_bid-i*ExtDownStep;
if (InpPending==limit)
{
double sl = (ExtStopLoss== 0.0 ) ? 0.0 : price_ask - ExtStopLoss;
double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_ask + ExtTakeProfit;
m_trade.BuyLimit(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
else
{
double sl = (ExtStopLoss== 0.0 ) ? 0.0 : price_bid + ExtStopLoss;
double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_bid - ExtTakeProfit;
m_trade.SellStop(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
m_symbol.NormalizePrice(sl),
m_symbol.NormalizePrice(tp));
}
}
}
Planlandığı gibi, komut dosyası, talep ve tekliften belirli bir mesafede bekleyen limit emirleri veya durdurma emirleri belirlemelidir. Limit bekleyen emirler sorunsuz bir şekilde belirlenir, ancak durdurma emirleri değildir. Lütfen Buy Stop ve Sell Stop bekleyen emirlerinin neden ayarlanmadığını anlamama yardım edin.
Saygılarımla, Vladimir.
Bundan sonra bir soru daha: Piyasa kapalıyken (örneğin hafta sonları) senaryoyu test etmenin herhangi bir yolu var mı?
Daha önce sorduğum soruya kimse cevap vermedi ama yine de kodu çözmeme yardım etmeni istiyorum.
Bundan sonra bir soru daha: Piyasa kapalıyken (örneğin hafta sonları) senaryoyu test etmenin herhangi bir yolu var mı?
Saygılarımla, Vladimir.
Hayır, komut dosyası kapalı bir piyasada çalışmaz - sipariş vermez.
Hataları anlamak için kurulum seviyelerini hesapladığınız fiyatın değerini ve işlem emrine gönderdiğiniz tüm fiyat seviyelerinin değerlerini logda yazdırmaya çalışın.
Açılan son siparişi bulmanız gerekir. Biletini bul. Daha sonra, nesne adları listesinde, nesne adıyla satırda son siparişin bulunan bileti ile bir alt dizinin oluşumunu ararız. Nesne adında son siparişin biletini bulduğunuzda, bu gerekli grafik nesnesidir. Bu grafik nesnesinden ihtiyacınız olanı çıkarmak için kalır.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Bu işlev, her siparişte bir sayı, daha doğrusu lot*100 yazar.
Şimdi en son hangi sayının olduğunu gösteren bir ters fonksiyona ihtiyacımız var.
Dene:
Nesne metin içeriyorsa (sayısal değil), StringSubstr() eklemeniz gerekir:
start_index - dizedeki karakter dizini, sıfırdan başlayarak, uzunluk - sayısal değerin uzunluğu (sayı kaç karakter kaplar)... bence öyle
Dene:
Nesne metin içeriyorsa (sayısal değil), StringSubstr() eklemeniz gerekir:
start_index - dizedeki karakter dizini, sıfırdan başlayarak, uzunluk - sayısal değerin uzunluğu (sayı kaç karakter kaplar)... bence öyle
Eh, başlangıçta tüm bu sayıları grafikte aramak gerekli olacaktır. Bu yüzden işe yaramayacak. Sorun bu. Zaten kontrol edildi
Dene:
Nesne metin içeriyorsa (sayısal değil), StringSubstr() eklemeniz gerekir:
start_index - dizedeki karakter dizini, sıfırdan başlayarak, uzunluk - sayısal değerin uzunluğu (sayı kaç karakter kaplar)... bence öyle
Böyle bir şey yaptım ama işe yaramadı. sıfır gösterir.
Böyle bir şey yaptım ama işe yaramadı. sıfır gösterir.
Değeri ayarlamanız mı yoksa almanız mı gerekiyor? ObjectSetString() işlevi , bir metin değeri ayarlar ve bir bool değeri döndürür . Bu o değil. Ve döngünün başında, bence, doğru biçimlendirilmemiş ... Where ObjectsTotal() ... MT4 referansı tarafından yönlendiriliyorum. Yoksa bir MT5 kodu mu?
Değeri ayarlamanız mı yoksa almanız mı gerekiyor? ObjectSetString() işlevi , bir metin değeri ayarlar ve bir bool değeri döndürür . Bu o değil. Ve döngünün başında, bence, doğru biçimlendirilmemiş ... Where ObjectsTotal() ... MT4 referansı tarafından yönlendiriliyorum. Yoksa bir MT5 kodu mu?
bu MT4
Bir kez daha, herkese iyi günler!
Daha önce sorduğum soruya kimse cevap vermedi ama yine de kodu çözmeme yardım etmeni istiyorum.
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma
MrBrooklin , 2019.08.30 14:15
Herkese iyi günler!
İşte Metatrader5 için komut dosyasının bir parçası:
Planlandığı gibi, komut dosyası, talep ve tekliften belirli bir mesafede bekleyen limit emirleri veya durdurma emirleri belirlemelidir. Limit bekleyen emirler sorunsuz bir şekilde belirlenir, ancak durdurma emirleri değildir. Lütfen Buy Stop ve Sell Stop bekleyen emirlerinin neden ayarlanmadığını anlamama yardım edin.
Saygılarımla, Vladimir.
Bundan sonra bir soru daha: Piyasa kapalıyken (örneğin hafta sonları) senaryoyu test etmenin herhangi bir yolu var mı?
Saygılarımla, Vladimir.
Hangi listeden?
Ve lütfen düzenleyicideki şekillendiriciyi kullanın (Ctrl+<):
Ne nereden alınmalı?
Bana söyler misin?
Bir kez daha, herkese iyi günler!
Daha önce sorduğum soruya kimse cevap vermedi ama yine de kodu çözmeme yardım etmeni istiyorum.
Bundan sonra bir soru daha: Piyasa kapalıyken (örneğin hafta sonları) senaryoyu test etmenin herhangi bir yolu var mı?
Saygılarımla, Vladimir.
Hayır, komut dosyası kapalı bir piyasada çalışmaz - sipariş vermez.
Hataları anlamak için kurulum seviyelerini hesapladığınız fiyatın değerini ve işlem emrine gönderdiğiniz tüm fiyat seviyelerinin değerlerini logda yazdırmaya çalışın.
Bana söyler misin?
Açılan son siparişi bulmanız gerekir. Biletini bul. Daha sonra, nesne adları listesinde, nesne adıyla satırda son siparişin bulunan bileti ile bir alt dizinin oluşumunu ararız. Nesne adında son siparişin biletini bulduğunuzda, bu gerekli grafik nesnesidir. Bu grafik nesnesinden ihtiyacınız olanı çıkarmak için kalır.