[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 284
Eu ficaria grato pelo princípio de converter um EA em um roteiro em poucas palavras.
E o que o roteiro vai fazer?
Normalmente o terminal é desconectado, um arquivo CSV é escrito a partir de um período de tempo não padrão e depois carregado em vez de qualquer símbolo e período, neste período e testado. Verdadeiro a preços de abertura, mas não há muitas outras opções.
Normalmente o terminal é desconectado, um arquivo CSV é escrito a partir de um prazo não-padrão e depois carregado em vez de qualquer símbolo e período, este é o período em que os testes são feitos. Verdadeiro a preços de abertura, mas não há muitas outras opções.
Obrigado a todos que responderam. Gosto da variante com a substituição da TF, vou experimentá-la. Inicialmente eu estava planejando abrir um TF autônomo não-padrão e descarregar os negócios em um arquivo usando um script do Expert Advisor.
Comecei a entender seu código. Estou surpreso. O que você tem anexado não pode funcionar. Você pode ver que é feito de pedaços, mas pelo menos os parênteses estão corretos.
O código é de duas partes. Este é o meu especialista. Por favor, dê uma olhada.
//+------------------------------------------------------------------+//| 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);
}
Você pode me dizer como apagar uma ordem pendente se uma das ordens pendentes tiver sido acionada? Um total de duas ordens pendentes são estabelecidas.
Executando o EA no testador. O servidor é de quatro dígitos. Ao colocar ordem de compra ou venda no tronco diz
2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: abrir #1 comprar 0.10 GBPUSD a 1.5551 sl: 1.4551 tp: 1.5586 ok
Mas abre em 1.55512 ! Com os cinco dígitos. Em seguida, os pedidos pendentes são colocados a quatro dígitos e acionados também a quatro dígitos. Mas OP_SELL e OP_BUY abrem apenas por cinco dígitos!
Eu faço NormalizarDuplo(Perguntar,Dígitos);
Nada funciona! Por favor, aconselhe como resolver este problema...
Você pode, é claro, ignorar o último dígito. O erro não ocorre, mas em nome da pureza do experimento, preciso que todas as minhas ofícios sejam feitas em quatro dígitos.
Muito provavelmente seu MT4 e servidor tem uma cotação de cinco dígitos, como o meu. Portanto, tudo tem que ser multiplicado por 10, como Dígitos = 5.
UP. o princípio da conversão de um EA em um roteiro, em poucas palavras, seria apreciado
UP. o princípio da conversão de um EA em um roteiro, em poucas palavras, seria apreciado
Não sei exatamente, mas parece que se você mudar o EA para scripts, ele funcionará como um script.
Eu ficaria grato pelo princípio de converter um EA em um roteiro em poucas palavras.
E o que o roteiro vai fazer?
Normalmente o terminal é desconectado, um arquivo CSV é escrito a partir de um período de tempo não padrão e depois carregado em vez de qualquer símbolo e período, neste período e testado. Verdadeiro a preços de abertura, mas não há muitas outras opções.
E o que o roteiro vai fazer?
Normalmente o terminal é desconectado, um arquivo CSV é escrito a partir de um prazo não-padrão e depois carregado em vez de qualquer símbolo e período, este é o período em que os testes são feitos. Verdadeiro a preços de abertura, mas não há muitas outras opções.
Obrigado a todos que responderam. Gosto da variante com a substituição da TF, vou experimentá-la. Inicialmente eu estava planejando abrir um TF autônomo não-padrão e descarregar os negócios em um arquivo usando um script do Expert Advisor.
O que é:
Máximo de drawdown, % - porcentagem máxima de drawdown;
Você pode especificar tal parâmetro no otimizador de estratégias, mas não está claro o que significa...
1) É a diminuição máxima do saldo em comparação com o depósito inicial?
2) Diferença máxima entre o máximo e o mínimo de patrimônio líquido se sucedendo?
3) A diferença entre a margem mínima e máxima?
Muitas outras variantes vêm à mente.
Por favor, explique o significado exato de (% máximo de drawdown, %)
Comecei a entender seu código. Estou surpreso. O que você tem anexado não pode funcionar. Você pode ver que é feito de pedaços, mas pelo menos os parênteses estão corretos.
O código é de duas partes. Este é o meu especialista. Por favor, dê uma olhada.
segunda parte
Olá!
Executando o EA no testador. O servidor é de quatro dígitos. Ao colocar ordem de compra ou venda no tronco diz
2011.10.23 15:27:26 2010.12.16 06:16 test_sovetnik GBPUSD,H1: abrir #1 comprar 0.10 GBPUSD a 1.5551 sl: 1.4551 tp: 1.5586 ok
Mas abre em 1.55512 ! Com os cinco dígitos. Em seguida, os pedidos pendentes são colocados a quatro dígitos e acionados também a quatro dígitos. Mas OP_SELL e OP_BUY abrem apenas por cinco dígitos!
Eu faço NormalizarDuplo(Perguntar,Dígitos);
Nada funciona! Por favor, aconselhe como resolver este problema...
Você pode, é claro, ignorar o último dígito. O erro não ocorre, mas em nome da pureza do experimento, preciso que todas as minhas ofícios sejam feitas em quatro dígitos.
Muito provavelmente seu MT4 e servidor tem uma cotação de cinco dígitos, como o meu. Portanto, tudo tem que ser multiplicado por 10, como Dígitos = 5.
Como posso apagar uma ordem pendente se uma delas for acionada? Há duas ordens pendentes definidas no total.
Você pode fazer isso manualmente. Clique com o botão direito do mouse e depois... :)
Você pode aplicar um roteiro ou um Expert Advisor. Qual você prefere? XD