[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 284
UP. apprezzerei il principio della conversione di un EA in uno script in poche parole
E cosa farà la sceneggiatura?
Di solito il terminale è scollegato, un file CSV viene scritto da un timeframe non standard e poi caricato al posto di qualsiasi simbolo e periodo, su questo periodo e testato. Vero a prezzi di apertura, ma non ci sono molte altre opzioni.
Di solito il terminale è scollegato, un file CSV viene scritto da un timeframe non standard e poi caricato al posto di qualsiasi simbolo e periodo, questo è il periodo su cui vengono fatti i test. Vero a prezzi di apertura, ma non ci sono molte altre opzioni.
Grazie a tutti coloro che hanno risposto. Mi piace la variante con la sostituzione TF, la proverò. Inizialmente avevo intenzione di aprire un TF standalone non standard e scaricare i trade in un file utilizzando uno script Expert Advisor.
Ho iniziato a capire il tuo codice. Sono sorpreso. Quello che avete allegato non può funzionare. Si può vedere che è fatto di pezzi e bocconi, ma almeno le staffe sono corrette.
Il codice è in due parti, questo è il mio esperto. Per favore, dategli un'occhiata.
//+------------------------------------------------------------------+//| 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);
}
Esecuzione dell'EA sul tester. Il server è a quattro cifre. Quando si inserisce un ordine di acquisto o di vendita nel registro si dice
2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: aperto #1 comprare 0,10 GBPUSD a 1,5551 sl: 1,4551 tp: 1,5586 ok
Ma apre a 1,55512! Alle cinque cifre. Poi gli ordini pendenti sono piazzati a quattro cifre e attivati anch'essi a quattro cifre. Ma OP_SELL e OP_BUY si aprono solo di cinque cifre!
Faccio NormalizeDouble(Ask,Digits);
Non funziona niente! Per favore, consigliate come risolvere questo problema?
È possibile, naturalmente, ignorare l'ultima cifra. L'errore non si verifica, ma per la purezza dell'esperimento, ho bisogno che tutti i miei scambi siano fatti in quattro cifre.
Molto probabilmente il tuo MT4 e il tuo server hanno una quotazione a cinque cifre, come il mio. Quindi, tutto deve essere moltiplicato per 10, poiché Cifre = 5.
UP. il principio della conversione di un EA in uno script in poche parole sarebbe apprezzato
UP. il principio della conversione di un EA in uno script in poche parole sarebbe apprezzato
Non lo so esattamente, ma sembra che se si sposta l'EA in script, funzionerà come uno script.
UP. apprezzerei il principio della conversione di un EA in uno script in poche parole
E cosa farà la sceneggiatura?
Di solito il terminale è scollegato, un file CSV viene scritto da un timeframe non standard e poi caricato al posto di qualsiasi simbolo e periodo, su questo periodo e testato. Vero a prezzi di apertura, ma non ci sono molte altre opzioni.
E cosa farà il copione?
Di solito il terminale è scollegato, un file CSV viene scritto da un timeframe non standard e poi caricato al posto di qualsiasi simbolo e periodo, questo è il periodo su cui vengono fatti i test. Vero a prezzi di apertura, ma non ci sono molte altre opzioni.
Grazie a tutti coloro che hanno risposto. Mi piace la variante con la sostituzione TF, la proverò. Inizialmente avevo intenzione di aprire un TF standalone non standard e scaricare i trade in un file utilizzando uno script Expert Advisor.
Che cos'è:
Drawdown massimo, % - percentuale di drawdown massimo;
È possibile specificare tale parametro nell'ottimizzatore di strategia, ma non è chiaro cosa significhi...
1) È la diminuzione massima del saldo rispetto al deposito iniziale?
2) La massima differenza tra il massimo e il minimo del patrimonio netto che si susseguono?
3) La differenza tra il margine minimo e massimo?
Mi vengono in mente molte altre varianti.
Si prega di spiegare l'esatto significato di (Maximum drawdown, %)
Ho iniziato a capire il tuo codice. Sono sorpreso. Quello che avete allegato non può funzionare. Si può vedere che è fatto di pezzi e bocconi, ma almeno le staffe sono corrette.
Il codice è in due parti, questo è il mio esperto. Per favore, dategli un'occhiata.
seconda parte
Ciao!
Esecuzione dell'EA sul tester. Il server è a quattro cifre. Quando si inserisce un ordine di acquisto o di vendita nel registro si dice
2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: aperto #1 comprare 0,10 GBPUSD a 1,5551 sl: 1,4551 tp: 1,5586 ok
Ma apre a 1,55512! Alle cinque cifre. Poi gli ordini pendenti sono piazzati a quattro cifre e attivati anch'essi a quattro cifre. Ma OP_SELL e OP_BUY si aprono solo di cinque cifre!
Faccio NormalizeDouble(Ask,Digits);
Non funziona niente! Per favore, consigliate come risolvere questo problema?
È possibile, naturalmente, ignorare l'ultima cifra. L'errore non si verifica, ma per la purezza dell'esperimento, ho bisogno che tutti i miei scambi siano fatti in quattro cifre.
Molto probabilmente il tuo MT4 e il tuo server hanno una quotazione a cinque cifre, come il mio. Quindi, tutto deve essere moltiplicato per 10, poiché Cifre = 5.
Come posso cancellare un ordine in sospeso se uno di essi è scattato? Ci sono due ordini pendenti impostati in totale.
Puoi farlo manualmente. Fare clic con il tasto destro del mouse e poi... :)
Puoi applicare uno script o un Expert Advisor. Quale preferisci? XD