UP: Ich wäre dankbar für das Prinzip der Umwandlung eines EA in ein Skript in Kurzform
Und was wird das Drehbuch tun?
In der Regel wird das Terminal ausgesteckt, eine CSV-Datei von einem nicht standardisierten Zeitrahmen geschrieben und dann anstelle eines beliebigen Symbols und Zeitraums auf diesen Zeitraum geladen und getestet. Zu den Eröffnungspreisen stimmt das, aber es gibt nicht viele andere Möglichkeiten.
In der Regel wird das Terminal ausgesteckt, eine CSV-Datei mit einem nicht standardisierten Zeitrahmen geschrieben und dann anstelle eines Symbols und einer Periode geladen, das ist die Periode, für die der Test durchgeführt wird. Zu den Eröffnungspreisen stimmt das, aber es gibt keine anderen Möglichkeiten.
Vielen Dank an alle, die geantwortet haben. Die Variante mit TF-Ersatz gefällt mir, ich werde sie ausprobieren. Ursprünglich hatte ich vor, ein nicht standardisiertes TF Standalone zu öffnen und Trades mit Hilfe eines Expert Advisor Skripts in eine Datei zu entladen.
Ich habe angefangen, Ihren Code zu verstehen. Ich bin erstaunt. Was Sie beigefügt haben, kann nicht funktionieren. Man sieht, dass es aus verschiedenen Teilen besteht, aber zumindest die Klammern sind korrekt.
Der Code besteht aus zwei Teilen: Das ist mein Experte. Bitte sehen Sie es sich an.
//+------------------------------------------------------------------+//| rusa_v4.mq4 |//| //| |//+------------------------------------------------------------------+#property copyright ""#property link "https://www.mql5.com/ru/users/avoitenko"//--- Внешние переменные externstring General = "=== General settings ===";
externint TakeProfit_Buy = 260; // Тейк профит для Buyexternint StopLoss_Buy = 120; // Стоп лосс для Buyexternint TakeProfit_Sell = 140; // Тейк профит для Sellexternint StopLoss_Sell = 110; // Стоп лосс для Sellexternint TrailingStop = 0; // Трейлинг стопexterndouble Lots = 0.02; // Лот externint Slippage = 10; // Проскальзываниеexternint BarsShift = 0; // Смещение в барах для анализа сигналаexternint Magic = 555; // Уникальный номер советникаexternstring MA1 = "=== #1 Moving Average settings ===";
externint MA1_period = 15; // Период скользящей средней externint MA1_shift = 0; // Смещение скользящей средней externint MA1_method = 1; // MODE_SMA=0,MODE_EMA=1,MODE_SMMA=2,MODE_LWMA =3;externint MA1_price = 2; // PRICE_CLOSE=0,PRICE_OPEN=1,PRICE_HIGH=2,PRICE_LOW=3,PRICE_MEDIAN=4,PRICE_TYPICAL=5,PRICE_WEIGHTED=6;externstring MA2 = "=== #2 Moving Average settings ===";
externint MA2_period = 20;
externint MA2_shift = 0;
externint MA2_method = 0;
externint MA2_price = 0;
externstring MA3 = "=== #3 Moving Average settings ===";
externint MA3_period = 70;
externint MA3_shift = 8;
externint MA3_method = 2;
externint MA3_price = 3;
externstring RSI = "=== RSI settings ===";
externint RSI_period = 14; // Период RSIexternint RSI_price = 3; // PRICE_CLOSE=0,PRICE_OPEN=1,PRICE_HIGH=2,PRICE_LOW=3,PRICE_MEDIAN=4,PRICE_TYPICAL=5,PRICE_WEIGHTED=6;externint macd_fast = 12;
externint macd_slow = 15;
externint macd_signal = 1;
externint macd_price = 3; // 0-PRICE_CLOSE, 1-PRICE_OPEN, 2-PRICE_HIGH, 3-PRICE_LOW, 4-PRICE_MEDIAN, 5-PRICE_TYPICAL, 6-PRICE_WEIGHTEDexternint macd_open = 7;
//--- Глобальные переменныеdouble lot; // лотdouble ma10,ma20,ma30,ma11,ma21,ma31,rsi, macd;
int stop_loss_buy; // стоп лоссint take_profit_buy; // тейк профитint stop_loss_sell; // стоп лоссint take_profit_sell; // тейк профитint slippage; // проскальзываниеint trailing_stop; // трейлинг стопint min_level; // минимальный отступ от цены для установки SL / TPint bars_shift; // смещение в барах для торговых сигналовint bars_count; // минимальное число баров для работыdatetime candle_time = 0;
bool sell_open = false; // флаг открытия позиции sellbool buy_open = false; // флаг открытия позиции buybool new_bar_buy = false; // флаг нового бараbool new_bar_sell = false; // флаг нового бара//+------------------------------------------------------------------+int init()
//+------------------------------------------------------------------+
{
//--- проверка правильности ввода данных
bars_shift = BarsShift;
if(bars_shift < 0)bars_shift = 0;
bars_count = MathMax4(MA1_period, MA2_period, MA3_period, RSI_period) + bars_shift;
//--- инициализация переменных
stop_loss_buy = StopLoss_Buy;
take_profit_buy = TakeProfit_Buy;
stop_loss_sell = StopLoss_Sell;
take_profit_sell = TakeProfit_Sell;
slippage = Slippage;
trailing_stop = TrailingStop;
//--- Если цена состоит из 3-x / 5-и цифрif((Digits==3) || (Digits==5))
{
stop_loss_buy = stop_loss_buy * 10;
take_profit_buy = take_profit_buy * 10;
stop_loss_sell = stop_loss_sell * 10;
take_profit_sell = take_profit_sell * 10;
slippage = slippage * 10;
trailing_stop = trailing_stop * 10;
}
Print("Советник начал свою работу");
return(0);
}
bool macd_up(int timeframe, int fast, int slow, int signal, int price, int num) {
double y;
double x = iMACD(NULL,timeframe,fast,slow,signal,price,MODE_MAIN,0)*100000;
for (int i=1; i<num; i++) {
y = iMACD(NULL,timeframe,fast,slow,signal,price,MODE_MAIN,i)*100000;
if (y > x) return(false);
else x = y;
}
return(true);
}
//+------------------------------------------------------------------+bool macd_down(int timeframe, int fast, int slow, int signal, int price, int num) {
double y;
double x = iMACD(NULL,timeframe,fast,slow,signal,price,MODE_MAIN,0)*100000;
for (int i=1; i<num; i++) {
y = iMACD(NULL,timeframe,fast,slow,signal,price,MODE_MAIN,i)*100000;
if (y < x) return(false);
else x = y;
}
return(true);
}
//+------------------------------------------------------------------+int deinit()
//+------------------------------------------------------------------+
{
Print("Советник завершил свою работу");
return(0);
}
//+------------------------------------------------------------------+int start()
//+------------------------------------------------------------------+
{
//--- Разрешение на открытие позиций - каждую свечуif(candle_time != Time[0])
{
candle_time = Time[0];
new_bar_buy = true;
new_bar_sell = true;
}
if (Bars < bars_count){Print("Мало данных для работы"); return(0);}
//--- Получение значений индикатора iMA
ma10 = iMA ( Symbol(), Period(), MA1_period, MA1_shift, MA1_method, MA1_price, bars_shift);
ma20 = iMA ( Symbol(), Period(), MA2_period, MA2_shift, MA2_method, MA2_price, bars_shift);
ma30 = iMA ( Symbol(), Period(), MA3_period, MA3_shift, MA3_method, MA3_price, bars_shift);
ma11 = iMA ( Symbol(), Period(), MA1_period, MA1_shift, MA1_method, MA1_price, bars_shift+1);
ma21 = iMA ( Symbol(), Period(), MA2_period, MA2_shift, MA2_method, MA2_price, bars_shift+1);
rsi = iRSI ( Symbol(), Period(), RSI_period, RSI_price, bars_shift);
macd = iMACD(NULL,0,macd_fast,macd_slow,macd_signal,macd_price,MODE_MAIN,0);
{
if (macd <0)
{
if (macd_down(0,macd_fast,macd_slow,macd_signal,macd_price,macd_open)) return(true);
{
//--- Условие для продажиif(ma11 < ma21 && ma10 > ma20 && ma30 > ma10 && rsi<50 && new_bar_sell)
{
sell_open=true;
new_bar_sell = false;
}
}
}
}
{
if (macd > 0)
{
if (macd_up(0,macd_fast,macd_slow,macd_signal,macd_price,macd_open)) return(true);
{
//--- Условие для продажиif(ma11 > ma21 && ma10 < ma20 && ma30 < ma10 && rsi>50 && new_bar_buy)
{
buy_open=true;
new_bar_buy = false;
}
}
}
}
{
if (macd > 0)
{
if (macd_up(0,macd_fast,macd_slow,macd_signal,macd_price,macd_open)) return(true);
{
//--- Условие для покупкиif(ma11 < ma21 && ma10 > ma20 && ma30 > ma10 && rsi>50 && new_bar_buy)
{
buy_open=true;
new_bar_buy = false;
}
}
}
{
if (macd < 0)
{
if (macd_down(0,macd_fast,macd_slow,macd_signal,macd_price,macd_open)) return(true);
{ //--- Условие для продажиif(ma11 > ma21 && ma10 < ma20 && ma30 < ma10 && rsi<50 && new_bar_sell)
{
sell_open=true;
new_bar_sell = false;
}
}
}
}
}
//--- выставление рыночных ордеровif(IsTradeAllowed())
{
Trade_BUY();
Trade_SELL();
}
return(0);
}
Können Sie mir sagen, wie ich einen schwebenden Auftrag löschen kann, wenn einer der schwebenden Aufträge ausgelöst wurde? Es sind insgesamt zwei offene Aufträge eingestellt.
Ausführen des EA auf dem Testgerät. Der Server ist vierstellig. Wenn Sie einen Kauf- oder Verkaufsauftrag erteilen, steht im Protokoll
2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: open #1 buy 0.10 GBPUSD at 1.5551 sl: 1.4551 tp: 1.5586 ok
Eröffnet aber bei 1,55512 ! Bei den fünf Ziffern. Dann werden die ausstehenden Aufträge mit vier Ziffern platziert und ebenfalls mit vier Ziffern ausgelöst. Aber OP_SELL und OP_BUY öffnen sich nur um fünf Ziffern!
Ich mache NormalizeDouble(Ask,Digits);
Nichts funktioniert! Wie kann ich dieses Problem lösen?
Sie können die letzte Ziffer natürlich auch weglassen. Der Fehler tritt nicht auf, aber um die Reinheit des Experiments zu gewährleisten, muss ich alle meine Geschäfte mit vier Ziffern abschließen.
Höchstwahrscheinlich hat Ihr MT4 und Ihr Server eine fünfstellige Quote, wie meine. Alles muss also mit 10 multipliziert werden, da Ziffern = 5.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
UP. das Prinzip der Umwandlung eines EA in ein Skript in einer Nussschale würde geschätzt werden
UP. das Prinzip der Umwandlung eines EA in ein Skript in einer Nussschale würde geschätzt werden
Ich weiß es nicht genau, aber es scheint, dass der EA wie ein Skript funktioniert, wenn Sie ihn in die Skripte verschieben.
UP: Ich wäre dankbar für das Prinzip der Umwandlung eines EA in ein Skript in Kurzform
Und was wird das Drehbuch tun?
In der Regel wird das Terminal ausgesteckt, eine CSV-Datei von einem nicht standardisierten Zeitrahmen geschrieben und dann anstelle eines beliebigen Symbols und Zeitraums auf diesen Zeitraum geladen und getestet. Zu den Eröffnungspreisen stimmt das, aber es gibt nicht viele andere Möglichkeiten.
Und was wird das Drehbuch tun?
In der Regel wird das Terminal ausgesteckt, eine CSV-Datei mit einem nicht standardisierten Zeitrahmen geschrieben und dann anstelle eines Symbols und einer Periode geladen, das ist die Periode, für die der Test durchgeführt wird. Zu den Eröffnungspreisen stimmt das, aber es gibt keine anderen Möglichkeiten.
Vielen Dank an alle, die geantwortet haben. Die Variante mit TF-Ersatz gefällt mir, ich werde sie ausprobieren. Ursprünglich hatte ich vor, ein nicht standardisiertes TF Standalone zu öffnen und Trades mit Hilfe eines Expert Advisor Skripts in eine Datei zu entladen.
Was ist:
Maximale Absenkung, % - maximaler Absenkungsprozentsatz;
Sie können diesen Parameter im Strategieoptimierer angeben, aber es ist nicht klar, was er bedeutet...
1) Handelt es sich um die maximale Verringerung des Guthabens im Vergleich zur ursprünglichen Einzahlung?
2) Maximale Differenz zwischen dem Maximum und dem Minimum der Aktien, die aufeinander folgen?
3) Der Unterschied zwischen der minimalen und maximalen Marge?
Viele andere Varianten fallen mir ein.
Erläutern Sie bitte die genaue Bedeutung von (Maximum Drawdown, %)
Ich habe angefangen, Ihren Code zu verstehen. Ich bin erstaunt. Was Sie beigefügt haben, kann nicht funktionieren. Man sieht, dass es aus verschiedenen Teilen besteht, aber zumindest die Klammern sind korrekt.
Der Code besteht aus zwei Teilen: Das ist mein Experte. Bitte sehen Sie es sich an.
zweiter Teil
Hallo!
Ausführen des EA auf dem Testgerät. Der Server ist vierstellig. Wenn Sie einen Kauf- oder Verkaufsauftrag erteilen, steht im Protokoll
2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: open #1 buy 0.10 GBPUSD at 1.5551 sl: 1.4551 tp: 1.5586 ok
Eröffnet aber bei 1,55512 ! Bei den fünf Ziffern. Dann werden die ausstehenden Aufträge mit vier Ziffern platziert und ebenfalls mit vier Ziffern ausgelöst. Aber OP_SELL und OP_BUY öffnen sich nur um fünf Ziffern!
Ich mache NormalizeDouble(Ask,Digits);
Nichts funktioniert! Wie kann ich dieses Problem lösen?
Sie können die letzte Ziffer natürlich auch weglassen. Der Fehler tritt nicht auf, aber um die Reinheit des Experiments zu gewährleisten, muss ich alle meine Geschäfte mit vier Ziffern abschließen.
Höchstwahrscheinlich hat Ihr MT4 und Ihr Server eine fünfstellige Quote, wie meine. Alles muss also mit 10 multipliziert werden, da Ziffern = 5.
Wie lösche ich einen schwebenden Auftrag, wenn einer der Aufträge ausgelöst wurde? Es sind insgesamt zwei offene Aufträge eingestellt.
Sie können dies manuell tun. Klicken Sie mit der rechten Maustaste und dann... :)
Sie können ein Skript oder einen Expert Advisor anwenden. Was ist Ihnen lieber? XD