Ich habe vergessen, die ganze Sache dem Experten zu erzählen.
Oder anders ausgedrückt: Wenn Sie EA vom Datum XXX bis zum Datum YYY testen, bis zu welcher Tiefe können die Daten von XXX heruntergeladen werden? ?????????????????
Ich brauche Rat zum Code: Ich habe einen Berater aus der Datenbank genommen, getestet, hinzugefügt, subtrahiert, die Koeffizienten geändert, um ein gutes Bild zu erhalten, das Bild scheint sich zu ergeben, aber bei der Demo funktioniert nichts, es ist das andere Umgekehrt ist es wie böse, ich hab alles nach den Artikeln gelehrt und Charts gut für einen Monat um 100% gesteigert. Also ist es nur für den Tester und es ist geeignet oder sollte es irgendwie anders getestet werden ??? Ich würde TreilingParabolikSAR auch gerne neu machen, damit sich nicht Stop Losses daran entlang bewegen, sondern Laien in einer bestimmten Entfernung vom Preis, vielleicht sagt Ihnen jemand, wo Sie es bekommen, bisher ist es nicht rübergekommen. Hier ist einer der resultierenden Codes mit guten Grafiken - sagen Sie mir, was falsch ist, was zu beheben ist, obwohl hier alles falsch sein kann ...
Gibt es eine relativ einfache Möglichkeit, ein Datum aus einem "Nicht-Standard"-String-Format in datetime oder zumindest ein leicht konvertierbares String-Format zu konvertieren?
Insbesondere, wenn der Monat in der Zeichenfolge Jan/Jeb/... ist, wie gebe ich ihn in das Skript ein? Ich meine, nur durch manuelles Heraussuchen des Monats aus der Zeichenkette, durch Ersetzen mit der entsprechenden Zahl in 12 Varianten? Oder übersehe ich irgendwo, wie man das Format für StringToTime usw. angibt?
Ich habe eine solche Konstruktion, die sich gerade darum kümmert:
int nmonth = buff[1]=="Jan"?01:buff[1]=="Feb"?02:buff[1]=="Mar"?03:buff[1]=="Apr"?04:buff[1]=="May"?05:buff[1]=="Jun"?06:
buff[1]=="Jul"?07:buff[1]=="Aug"?08:buff[1]=="Sep"?09:buff[1]=="Oct"?10:buff[1]=="Nov"?11:buff[1]=="Dec"?12:01;
...aber irgendwie gefällt mir das nicht, obwohl es auf konventionelle Weise funktioniert.
Nicht ein einziger Handel. Was könnte der Grund dafür sein?
EA-Code:
#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;
}
}
}
Nicht ein einziger Handel. Was könnte der Grund dafür sein?
EA-Code:
Um einen Indikatorwert zu erhalten, müssen Sie ein Indikator-Handle in OnInit erstellen und dann den Wert in ein Array mit CopyBuffer in OnTick kopieren. Der Artikel Handelsoperationen in MQL5 zeigt Ihnen nur, wie Sie einen einfacheren Code zum Öffnen/Schließen einer Position/Order schreiben können.
paladin800: Um den Wert des Indikators zu erhalten, müssen Sie in OnInit ein Indikator-Handle erstellen und dann in OnTick den Wert mit CopyBuffer in ein Array kopieren. Der Artikel Handelsoperationen in MQL5 zeigt nur, wie man einen einfacheren Code für das Öffnen/Schließen einer Position/Order schreiben kann.
Ich danke Ihnen! In MQL4 ist das ganz anders, es ist einfacher. Aber MQL5 ist meiner Meinung nach schneller und genauer.
Können Sie mir sagen, wie ich einen schwebenden Auftrag, der noch nicht eröffnet wurde, schließen kann? Ich versuche, es auf diese Weise zu tun:
Oder sollte ich in die Zeile mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits); andere Informationen schreiben? Ich danke Ihnen.
Lesen Sie einfach "Ändern und Löschen von Aufträgen" in MQL5. Vielleicht finden Sie dort die Antwort. Ich empfehle Ihnen, den gesamten Artikel zu lesen.
Ich verstehe nicht, warum die Daten auf der Nullleiste nicht der Realität entsprechen.
Ich erhalte dieses Ergebnis
2013.10.27 17:45:26 Kern 1 2013.01.01 00:00:00 369878 2012.12.31 19:00:00 2012.01.02 00:00:00
2013.10.27 17:45:26 Kern 1 2013.01.01 00:00:00 369878
Ich habe vergessen, die ganze Sache dem Experten zu erzählen.
Oder anders ausgedrückt: Wenn Sie EA vom Datum XXX bis zum Datum YYY testen, bis zu welcher Tiefe können die Daten von XXX heruntergeladen werden? ?????????????????
Ich brauche Rat zum Code: Ich habe einen Berater aus der Datenbank genommen, getestet, hinzugefügt, subtrahiert, die Koeffizienten geändert, um ein gutes Bild zu erhalten, das Bild scheint sich zu ergeben, aber bei der Demo funktioniert nichts, es ist das andere Umgekehrt ist es wie böse, ich hab alles nach den Artikeln gelehrt und Charts gut für einen Monat um 100% gesteigert. Also ist es nur für den Tester und es ist geeignet oder sollte es irgendwie anders getestet werden ??? Ich würde TreilingParabolikSAR auch gerne neu machen, damit sich nicht Stop Losses daran entlang bewegen, sondern Laien in einer bestimmten Entfernung vom Preis, vielleicht sagt Ihnen jemand, wo Sie es bekommen, bisher ist es nicht rübergekommen. Hier ist einer der resultierenden Codes mit guten Grafiken - sagen Sie mir, was falsch ist, was zu beheben ist, obwohl hier alles falsch sein kann ...
Prüfung eines bestimmten Wertes, bei dessen Überschreitung ein Handel eröffnet wird.
Parameter für die Eingabe:
bool Sell_Condition = (signal >= sgl);Ich wähle den Wert der Variablen sgl im Tester:
Variablentyp "Signal" doppelt.
Wenn ich einen einzelnen Test durchführe, sehe ich, dass bei sgl=0.003 der Eintrag bei 0.0024, 0.0027, 0.0015, usw. erfolgt.
Die Auslöselogik ist korrekt, aber die Ausführungsgenauigkeit ist es nicht.
Wie kann ich die Ausführungsgenauigkeit verbessern?
...
Wie können Sie die Genauigkeit Ihrer Leistung verbessern?
Versuchen Sie es:
Gibt es eine relativ einfache Möglichkeit, ein Datum aus einem "Nicht-Standard"-String-Format in datetime oder zumindest ein leicht konvertierbares String-Format zu konvertieren?
Insbesondere, wenn der Monat in der Zeichenfolge Jan/Jeb/... ist, wie gebe ich ihn in das Skript ein? Ich meine, nur durch manuelles Heraussuchen des Monats aus der Zeichenkette, durch Ersetzen mit der entsprechenden Zahl in 12 Varianten? Oder übersehe ich irgendwo, wie man das Format für StringToTime usw. angibt?
Ich habe eine solche Konstruktion, die sich gerade darum kümmert:
...aber irgendwie gefällt mir das nicht, obwohl es auf konventionelle Weise funktioniert.
MA_1_t - kleiner Zeitraum, MA_2_t - mittlerer Zeitraum, MA_3_t - großer Zeitraum.
Wenn ich die folgenden Bedingungen erfülle:
bool Buy_Condition_1=(MA_1_t < MA_2_t && MA_2_t < MA_3_t);dann wird der Handel eröffnet.
Die Bedingungen sind umgedreht:
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);Nicht ein einziger Handel. Was könnte der Grund dafür sein?
EA-Code:
MA_1_t - kleiner Zeitraum, MA_2_t - mittlerer Zeitraum, MA_3_t - großer Zeitraum.
Wenn ich die folgenden Bedingungen erfülle:
dann wird der Handel eröffnet.
Die Bedingungen sind umgedreht:
Nicht ein einziger Handel. Was könnte der Grund dafür sein?
EA-Code:
Um den Wert des Indikators zu erhalten, müssen Sie in OnInit ein Indikator-Handle erstellen und dann in OnTick den Wert mit CopyBuffer in ein Array kopieren. Der Artikel Handelsoperationen in MQL5 zeigt nur, wie man einen einfacheren Code für das Öffnen/Schließen einer Position/Order schreiben kann.
Können Sie mir sagen, wie ich einen schwebenden Auftrag, der noch nicht eröffnet wurde, schließen kann? Ich versuche, es auf diese Weise zu tun:
Oder sollte ich in die Zeile mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits); andere Informationen schreiben? Ich danke Ihnen.Können Sie mir sagen, wie ich einen schwebenden Auftrag, der noch nicht eröffnet wurde, schließen kann? Ich versuche, es auf diese Weise zu tun:
Oder sollte ich in die Zeile mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits); andere Informationen schreiben? Ich danke Ihnen.