Veya başka bir deyişle, XXX tarihinden YYY tarihine kadar bir Uzman Danışmanı test ederken, veriler XXX'den hangi derinliğe kadar yüklenebilir?????????????????????
Kod hakkında tavsiyeye ihtiyacım var: Veritabanından bir danışman aldım, test ettim, ekledim, çıkardım, iyi bir resim elde etmek için katsayıları değiştirdim, resim çıkıyor gibi görünüyor, ancak demoda hiçbir şey çalışmıyor, diğeri Etrafında, kötü gibi, her şeyi öğretilen makalelere ve çizelgelere göre ayarlıyorum, bir ay boyunca %100 artışlar. Yani sadece test eden için ve uygun mu yoksa bir şekilde farklı şekilde mi test edilmeli ??? Ayrıca TreilingParabolikSAR'ı yeniden yapmak istiyorum, böylece kayıplar durmaz , ancak fiyattan belirli bir mesafede sıradan insanlar, belki birileri size nereden alacağınızı söyler, şimdiye kadar rastlamadı. İşte iyi grafiklere sahip ortaya çıkan kodlardan biri - bana neyin yanlış olduğunu, neyin düzeltileceğini söyleyin, burada her şey yanlış olsa da ...
Söyleyin bana, bir tarihi "standart olmayan" bir dize biçiminden tarih saatine veya en azından kolayca dönüştürülebilir bir dize biçimine dönüştürmenin nispeten kolay bir yolu var mı?
Özellikle, ay Jan/Jeb/... satırdaysa, onu senaryoya nasıl beslersiniz? Yani, sadece satırdan ayı seçerek, 12 varyasyonda karşılık gelen sayı ile değiştirerek mi? Yoksa StringToTime vb. için formatı nasıl belirleyeceğimi bir yerde mi özlüyorum?
#property copyright""#property link""#property version"1.00"//--- input parametersinputushort StopLoss= 600 ;
inputushort TakeProfit= 450 ;
inputint EA_Magic= 12345 ; // Magic Number советникаinputuchar ma_period_1= 5 ;
inputuchar ma_period_2= 15 ;
inputuchar ma_period_3= 30 ;
inputdouble Lot= 0.01 ;
//--- глобальные переменныеint STP,TKP; // будут использованы для значений Stop Loss и Take Profit//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//--- Для работы с брокерами, использующими 5-ти значные котировки,//--- умножаем на 10 значения SL и TP
STP = StopLoss;
TKP = TakeProfit;
//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
double MA_1_t = iMA ( NULL , 0 ,ma_period_1, 0 , MODE_EMA , PRICE_CLOSE );
double MA_2_t = iMA ( NULL , 0 ,ma_period_2, 0 , MODE_EMA , PRICE_CLOSE );
double MA_3_t = iMA ( NULL , 0 ,ma_period_3, 0 , MODE_EMA , PRICE_CLOSE );
//---MqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовMqlRates mrate[]; // Будет содержать цены, объемы и спред для каждого бараZeroMemory (mrequest); // Инициализация полей структуры mrequest//--- Получить текущее значение котировки в структуру типа MqlTickif (! SymbolInfoTick ( _Symbol ,latest_price))
{
Alert ( "Ошибка получения последних котировок - ошибка:" , GetLastError (), "!!" );
return ;
}
//--- есть ли открытые позиции?bool Buy_opened= false ; // переменные, в которых будет храниться информация bool Sell_opened= false ; // о наличии соответствующих открытых позицийif ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
{
if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
{
Buy_opened= true ; //это длинная позиция
}
elseif ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
{
Sell_opened= true ; // это короткая позиция
}
}
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);
//--- собираем все вместеif (Buy_Condition_1)
{
// есть ли в данный момент открытая позиция на покупку?if (Buy_opened)
{
Alert ( "Уже есть позиция на продажу!!!" );
return ; // не добавлять к открытой позиции на продажу
}
mrequest.action = TRADE_ACTION_DEAL ; // немедленное исполнение
mrequest.price = NormalizeDouble (latest_price.ask, _Digits ); // последняя цена ask
mrequest.sl = NormalizeDouble (latest_price.ask - STP* _Point , _Digits ); // Stop Loss
mrequest.tp = NormalizeDouble (latest_price.ask + TKP* _Point , _Digits ); // Take Profit
mrequest.symbol = _Symbol ; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY ; // ордер на покупку
mrequest.type_filling = ORDER_FILLING_FOK ; // тип исполнения ордера - все или ничего
mrequest.deviation= 100 ; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend (mrequest,mresult);
// анализируем код возврата торгового сервераif (mresult.retcode== 10009 || mresult.retcode== 10008 ) //запрос выполнен или ордер успешно помещен
{
Alert ( "Ордер Buy успешно помещен, тикет ордера #:" ,mresult.order, "!!" );
}
else
{
Alert ( "Запрос на установку ордера Buy не выполнен - код ошибки:" , GetLastError ());
return ;
}
}
}
MA_1_t - küçük nokta, MA_2_t - orta nokta, MA_3_t - büyük nokta.
Aşağıdaki koşulları yaparsam:
sonra anlaşmalar açılır.
Converse koşulları:
Tek bir anlaşma değil. Nedeni ne olabilir?
danışman kodu:
Gösterge değerini almak için, önce OnInit'te gösterge tutamağını oluşturun ve ardından değeri CopyBuffer kullanarak OnTick'teki diziye kopyalayın. Ve MQL5'teki Ticaret İşlemleri makalesinde - bir pozisyonu/siparişi açmak/kapatmak için bir kod yazmanın ne kadar kolay olduğu anlatılmaktadır.
paladin800 : Gösterge değerini almak için, önce OnInit'te gösterge tutamağını oluşturun ve ardından değeri CopyBuffer kullanarak OnTick'teki diziye kopyalayın. Ve MQL5'teki Ticaret İşlemleri makalesinde - bir pozisyonu/siparişi açmak/kapatmak için bir kod yazmanın ne kadar kolay olduğu anlatılmaktadır.
Teşekkür ederim! Anladım, MQL4 tamamen farklı, daha basit. Ancak, MQL5'te test hızı bence daha hızlı ve daha doğru.
Bana açılmamış bekleyen bir siparişi nasıl kapatacağımı söyle. Bunu şöyle yapmaya çalışıyorum:
Veya satırında mrequest.price= NormalizeDouble (Bid-(SL- 45 ) * _Point , _Digits ); başka bilgi yazmama gerek var mı? Teşekkür ederim.
MQL5'te Ticaret işlemleri makalesinde - sadece "Bir emri değiştirme ve silme" bölümünü okuyun. Belki cevabı orada bulabilirsiniz. Ve genel olarak, makalenin tamamını okumanızı tavsiye ederim.
Sıfır çubuğundaki verilerin neden doğru olmadığını anlamıyorum, söyle bana
bu sonucu alıyorum
2013.10.27 17:45:26 Çekirdek 1 2013.01.01 00:00:00 369878 2012.12.31 19:00:00
2013.10.27 17:45:26 Çekirdek 1 2013.01.01 00:00:00 369878
Her şeyi bir uzmanda söylemeyi unuttum
Veya başka bir deyişle, XXX tarihinden YYY tarihine kadar bir Uzman Danışmanı test ederken, veriler XXX'den hangi derinliğe kadar yüklenebilir?????????????????????
Kod hakkında tavsiyeye ihtiyacım var: Veritabanından bir danışman aldım, test ettim, ekledim, çıkardım, iyi bir resim elde etmek için katsayıları değiştirdim, resim çıkıyor gibi görünüyor, ancak demoda hiçbir şey çalışmıyor, diğeri Etrafında, kötü gibi, her şeyi öğretilen makalelere ve çizelgelere göre ayarlıyorum, bir ay boyunca %100 artışlar. Yani sadece test eden için ve uygun mu yoksa bir şekilde farklı şekilde mi test edilmeli ??? Ayrıca TreilingParabolikSAR'ı yeniden yapmak istiyorum, böylece kayıplar durmaz , ancak fiyattan belirli bir mesafede sıradan insanlar, belki birileri size nereden alacağınızı söyler, şimdiye kadar rastlamadı. İşte iyi grafiklere sahip ortaya çıkan kodlardan biri - bana neyin yanlış olduğunu, neyin düzeltileceğini söyleyin, burada her şey yanlış olsa da ...
Belli bir değeri test ediyorum, aşılırsa anlaşma açılıyor.
Giriş seçenekleri:
bool Sell_Condition = (signal >= sgl);Test cihazındaki sgl değişkeninin değerini yineliyorum:
değişken tipi "sinyal" çift.
Tek bir test çalıştırırken, sgl= 0.003 ile girişin 0.0024, 0.0027, 0.0015, vb.'de yapıldığını görüyorum.
İşlem mantığı doğru, ancak yürütme doğruluğu değil.
Yürütme doğruluğu nasıl geliştirilir?
...
Yürütme doğruluğu nasıl geliştirilir?
O zaman dene:
Söyleyin bana, bir tarihi "standart olmayan" bir dize biçiminden tarih saatine veya en azından kolayca dönüştürülebilir bir dize biçimine dönüştürmenin nispeten kolay bir yolu var mı?
Özellikle, ay Jan/Jeb/... satırdaysa, onu senaryoya nasıl beslersiniz? Yani, sadece satırdan ayı seçerek, 12 varyasyonda karşılık gelen sayı ile değiştirerek mi? Yoksa StringToTime vb. için formatı nasıl belirleyeceğimi bir yerde mi özlüyorum?
Artık bu konuyu ele alan böyle bir tasarımım var:
...ama şartlı olarak çalışmasına rağmen nedense benim için güzel değil.
MA_1_t - küçük nokta, MA_2_t - orta nokta, MA_3_t - büyük nokta.
Aşağıdaki koşulları yaparsam:
bool Buy_Condition_1=(MA_1_t < MA_2_t && MA_2_t < MA_3_t);sonra anlaşmalar açılır.
Converse koşulları:
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);Tek bir anlaşma değil. Nedeni ne olabilir?
danışman kodu:
MA_1_t - küçük nokta, MA_2_t - orta nokta, MA_3_t - büyük nokta.
Aşağıdaki koşulları yaparsam:
sonra anlaşmalar açılır.
Converse koşulları:
Tek bir anlaşma değil. Nedeni ne olabilir?
danışman kodu:
Gösterge değerini almak için, önce OnInit'te gösterge tutamağını oluşturun ve ardından değeri CopyBuffer kullanarak OnTick'teki diziye kopyalayın. Ve MQL5'teki Ticaret İşlemleri makalesinde - bir pozisyonu/siparişi açmak/kapatmak için bir kod yazmanın ne kadar kolay olduğu anlatılmaktadır.
Bana açılmamış bekleyen bir siparişi nasıl kapatacağımı söyle. Bunu şöyle yapmaya çalışıyorum:
Veya satırında mrequest.price= NormalizeDouble (Bid-(SL- 45 ) * _Point , _Digits ); başka bilgi yazmama gerek var mı? Teşekkür ederim.Bana açılmamış bekleyen bir siparişi nasıl kapatacağımı söyle. Bunu şöyle yapmaya çalışıyorum:
Veya satırında mrequest.price= NormalizeDouble (Bid-(SL- 45 ) * _Point , _Digits ); başka bilgi yazmama gerek var mı? Teşekkür ederim.