Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 55

 
trader781:
Eu ainda não uso classes, matrizes, macros e importação de bibliotecas Windows. Tudo em tempo hábil.
Você não deveria ter feito isso com matrizes. As arrays são úteis. E o mesmo acontece com as estruturas. O resto, sim, você nunca poderá usar de forma alguma se os projetos não forem muito complexos.
 
Vitalie Postolache:
Com matrizes, é um desperdício. As arrays são úteis. E o mesmo acontece com as estruturas. O resto, sim, nunca poderá ser usado se os projetos não forem complexos.
Quanto às arrays, concordo que são muito úteis e muitas vezes não se pode escrever um programa sensato sem elas. Estruturas... Eu gosto de usar aulas em programas web, não é realmente conveniente, especialmente se o projeto é grande, e eu não gosto de usar o MQ no Expert Advisor habitual de uma página. Escrevi no OOP todos os dados sobre aberto/fechado, comecei a usar e apagar tudo, reescrevi em estilo de procedimento e uso, escrevi tudo em um loop. Portanto, as aulas são um pouco de um gosto adquirido.
 
Vitaly Muzichenko:
Concordo que as matrizes são muito úteis, e muitas vezes não se pode escrever um programa de forma sensata sem elas. Estruturas... Eu escrevo aulas em programas web, é realmente ruim e não conveniente sem eles, especialmente se o projeto é grande, mas eu não gostei da MQ no Expert Advisor de uma página de costume. Escrevi no OOP todos os dados abertos/fechados, comecei a usar e excluí tudo, reescrevi em estilo e uso processual, escrevi tudo em um loop. Portanto, as aulas são para os aficionados.
Hmmm. O que isso tem a ver com as aulas? As estruturas e as classes são um pouco diferentes. Eu escrevi sobre estruturas. MqlRates, etc., etc...
 

Ajude-me a adicionar o número máximo de pedidos abertos (MAXORders)


//
extern string rem2 = "=== Número de lotes ===";
externo duplo _Lots0_1 = 0,1; // Nível base (para o 1º pedido)
externo duplo _Lots0_2 = 0,1; // Nível base (para a 2ª ordem)
//
extern string rem3 = "=== Parâmetros adicionais ===";
externo int _TakeProfit1_Proc = 50; // Percentual de risco para obter lucro da 1ª ordem
externo int _SpaseFromMaxMin = 1; // Deslocamento de cima/baixo
//
extern string rem4 = "=== Parâmetros de equilíbrio ===";
extern bool _IsStopLoss_0 = false; // Habilitando o uso do nível de equilíbrio
externo int _StopLoss_0_From = 0; // Deslocamento do nível de equilíbrio (em pontos)
externo int _StopLoss_0_Level = 15; //Nível de equilíbrio
//
extern string rem5 = "=== Parâmetros de parada final ===";
extern bool _IsTrailingStop = false; // Ativa o trailing stop
bool _IsTrailingStopProfit = true; // Habilitando um trailing stop a partir de uma posição de equilíbrio
//extern int _TrailingStopProfit_From = 0; // Deslocamento do nível de equilíbrio (em pontos)
extern int _TrailingStopLevel = 15; // Nível de trailing stop
extern int _TrailingStopStep = 5; // Passo de movimento do trailing stop
//
extern string rem6 = "=== Configurações da ferramenta ===";
string externa _Symboll = ""; // Nome simbólico do instrumento: "" - símbolo atual
extern int _Timeframe = 0; // Período: 0 - período do gráfico atual
int_Digitss; // Número de dígitos após o ponto decimal no preço
double _Points; // Tamanho do ponto na moeda da cotação
extern int _Slippage = 2; // derrapagem
externo int _Magic1 = 1281; // Número único de pedidos do EA (1º pedido)
externo int _Magic2 = 1282; // Número único de pedidos do EA (2º pedido)
//
extern string rem7 = "=== parâmetros do indicador MA1 ===";
externo int _MA1_Timeframe = PERIOD_D1; // Período: 0 - período do gráfico atual
externo int _MA1_Period = 20; // Período médio para calcular a média móvel
externo int _MA1_Shift = 0; // Deslocamento do indicador em relação ao gráfico de preços
externo int _MA1_Method = 0; // Método de média: 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
extern int _MA1_Applied_Price = 0; // Preço usado: 0 - fechar, 1 - abrir, 2 - alto, 3 - baixo
//
extern string rem8 = "=== parâmetros do indicador MA2 ===";
externo int _MA2_Timeframe = PERIOD_H4; // Período: 0 - período do gráfico atual
externo int _MA2_Period = 20; // Período médio para calcular a média móvel
externo int _MA2_Shift = 0; // Deslocamento do indicador em relação ao gráfico de preços
externo int _MA2_Method = 0; // Método de média: 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
extern int _MA2_Applied_Price = 0; // Preço usado: 0 - fechar, 1 - abrir, 2 - alto, 3 - baixo
//
extern string rem9 = "=== Parâmetros do indicador Bollinger Bands ===";
//extern int _BB_Timeframe = 0; // Período: 0 - período do gráfico atual
externo int _BB_Period = 20; // Período médio da linha do indicador principal
externo int _BB_Desvio = 2; // Desvio da linha principal
externo int _BB_Bands_Shift = 0; // Deslocamento do indicador em relação ao gráfico de preços
extern int _BB_Applied_Price = 0; // Preço usado: 0 - fechar
//
extern string rem10 = "=== Parâmetros do indicador ZigZag ===";
//extern int _ZZ_Timeframe = 0; // Período: 0 - período do gráfico atual
externo int _ZZ_ExtDepth = 12;
externo int _ZZ_ExtDeviation = 5;
externo int _ZZ_ExtBackstep = 3;
//
datetime_TimeAnterior;
datetime _TimeCurrent;
//
string_fstr;
int_tp;
//



void MaxOrders(int max_orders=5);










//=++============================================= ================++=
int init()
{
if(_Symbol == "") _Symboll = Symbol();
//
_Digitss = MarketInfo(_Symbol, MODE_DIGITS);
_Points = MarketInfo(_Symbol, MODE_POINT);
//
if(_Timeframe == 0) _Timeframe = Period();
Print("v128-2 > init() >> _Timeframe=", _Timeframe,
"rem4=",_IsStopLoss_0,
"rem5=",_IsTrailingStop,_IsTrailingStopProfit);
//
_fstr = "v128_";
_tp = _FileReadWriteDouble(_fstr+"_tp.dat", 0); // verifique se o arquivo existe, se não existir, crie-o
Print("v128-2 > init() >> _Timeframe=", _Timeframe, " _tp=",_tp);
//
_TimePrevious=iTime(_Symbol, _Timeframe, 0);
//
Print("v128-2 > Concluído: init() >> _TimePrevious=", _TimePrevious, " (", TimeToStr(_TimePrevious,TIME_DATE|TIME_MINUTES), ")");
retorno(0);
}


//=++============================================= ================++=
int start()
{
duplo P_Close1, P_Close2;
duplo BB_1_superior, BB_1_inferior;
duplo MA1_0, MA2_0;
double P_ask, P_bid;
bool is_signal_2_buy, is_signal_2_sell;
duplo P1_comprar, P2_comprar, P3_comprar;
duplo P1_sell, P2_sell, P3_sell;
bool is_b1 = falso, is_s1 = falso;
bool is_b2 = falso, is_s2 = falso;
bilhete interno;
//
_TimeCurrent = iTime(_Symbol, _Timeframe, 0);
if(_TimeCurrent != _TimePrevious)
{
MA1_0 = iMA(_Symbol, _MA1_Timeframe, _MA1_Period, _MA1_Shift, _MA1_Method, _MA1_Applied_Price, 0);
MA2_0 = iMA(_Symbol, _MA2_Timeframe, _MA2_Period, _MA2_Shift, _MA2_Method, _MA2_Applied_Price, 0);
BB_1_upper = iBands(_Symbol, _Timeframe, _BB_Period,_BB_Deviation,_BB_Bands_Shift,_BB_Applied_Price, MODE_UPPER, 1);
BB_1_lower = iBands(_Symbol, _Timeframe, _BB_Period,_BB_Deviation,_BB_Bands_Shift,_BB_Applied_Price, MODE_LOWER, 1);
P_Close1 = iClose(_Symbol, _Timeframe, 1);
P_Close2 = iClose(_Symbol, _Timeframe, 2);
P_ask = MarketInfo(_Symbol, MODE_ASK);
P_bid = MarketInfo(_Symbol, MODE_BID);
Print("v120-4 > ", _Symbol, " | ", _Timeframe,
" -> MA1_0=", MA1_0, " | MA2_0=", MA2_0,
" -> BB_1_superior=", BB_1_superior, " | BB_1_inferior=", BB_1_inferior,
" -> P_Close1=", P_Close1, " | P_Close2=", P_Close2,
" -> pedir=", P_pedir, " | lance=", P_bid);
//
is_signal_2_buy = P_bid >= MA1_0 && P_bid >= MA2_0 && P_Close1 >= BB_1_lower && P_Close2 <= BB_1_lower && P_bid >= BB_1_lower;
is_signal_2_sell = P_bid <= MA1_0 && P_bid <= MA2_0 && P_Close1 <= BB_1_upper && P_Close2 >= BB_1_upper && P_bid <= BB_1_upper;
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> is_signal2 -> buy=", is_signal_2_buy, " | sell=", is_signal_2_sell);
// ========== por mercado
// ========== abrindo uma ordem de COMPRA
if( is_signal_2_buy )
{
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> sinal para abrir uma ordem de COMPRA");
OrdersDeleteAll(OP_SELL);
//
if(!is_b1 || !is_b2)
{
P1_comprar = P_pedir;
P3_buy = FindPriceMinMax(false) - (_SpaseFromMaxMin) * _Point;
_tp = (P1_compra - P3_compra) / _Ponto * (_TakeProfit1_Proc / 100,0);
P2_buy = DoubleTestZero(_tp, P1_buy + (_tp) * _Point);
//
_FileWriteDouble(_fstr+"_tp.dat", _tp);
//
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> COMPRAR -> P1_comprar=", P1_comprar, " | P2_comprar=", P2_comprar, " | P3_comprar=", P3_comprar, "_tp=", _tp);
//
ticket = OrderSend(_Symbol, OP_BUY, _Lots0_1, ND(P1_buy), _Slippage, ND(P3_buy), ND(P2_buy),
NULL, _Magic1, 0, CLR_NONE);
if(ticket == -1)
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> COMPRAR (1) > Erro (abertura) #", GetLastError());
senão é_b1 = verdadeiro;
//
ticket = OrderSend(_Symbol, OP_BUY, _Lots0_2, ND(P1_buy), _Slippage, ND(P3_buy), 0,
NULL, _Magic2, 0, CLR_NONE);
if(ticket == -1)
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> COMPRAR (2) > Erro (abertura) #", GetLastError());
senão é_b2 = true;
//
}
else { is_b1 = true; is_b2 = verdadeiro; }
}
else { is_b1 = true; is_b2 = verdadeiro; }
//Print("= comprar +++",is_b1,is_b2,"==",is_s1,is_s2);
// ========== abrindo uma ordem de VENDA
if( is_signal_2_sell )
{
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> sinal para abrir uma ordem de VENDA");
OrdersDeleteAll(OP_BUY);
//
if(!is_s1 || !is_s2)
{
P1_venda = P_lance;
P3_sell = FindPriceMinMax(true) + (_SpaseFromMaxMin) * _Point;
_tp = (P3_sell - P1_sell) / _Point * (_TakeProfit1_Proc / 100.0);
P2_sell = DoubleTestZero(_tp, P1_sell - (_tp) * _Point);
//
_FileWriteDouble(_fstr+"_tp.dat", _tp);
//
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> COMPRAR -> P1_sell=", P1_sell, " | P2_sell=", P2_sell, " | P3_sell=", P3_sell);
//
ticket = OrderSend(_Symbol, OP_SELL, _Lots0_1, ND(P1_sell), _Slippage, ND(P3_sell), ND(P2_sell),
NULL, _Magic1, 0, CLR_NONE);
if(ticket == -1)
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> VENDER (1) > Erro (abertura) #", GetLastError());
senão é_s1 = true;
//
ticket = OrderSend(_Symbol, OP_SELL, _Lots0_2, ND(P1_sell), _Slippage, ND(P3_sell), 0,
NULL, _Magic2, 0, CLR_NONE);
if(ticket == -1)
Print("v128-2 > ", _Symbol, " | ", _Timeframe,
" -> VENDER (2) > Erro (abertura) #", GetLastError());
senão é_s2 = true;
//
}
else { is_s1 = true; is_s2 = verdadeiro; }
}
else { is_s1 = true; is_s2 = verdadeiro; }
//Print("= vender +++",is_b1,is_b2,"==",is_s1,is_s2);
// ==========
if(é_b1 && é_s1 && é_b2 && é_s2)
_TimePrevious=_TimeCurrent;
}
//
if(_IsTrailingStop)
{
if( !FindOrders(_Magic1) ) TrailingStop(_tp);
}
//
if(_IsStopLoss_0)
StopLoss_0(_StopLoss_0_From);
//
retorno(0);
}


//=++============================================= ================++=
double DoubleTestZero(double value, double new_value)
{
if(valor==0) return(valor);
senão return(novo_valor);
}


//=++============================================= ================++=
ND duplo (valor duplo)
{
return( NormalizeDouble(valor, _Digits) );
}


//=++============================================= ================++=
// fechando pedidos. Terminar em fechar tudo
void OrdersDeleteAll(int cmd)
{
while(CountOrders(cmd) > 0)
{
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if((OrderSymbol() == _Symbol)
&& (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2)
&& (OrderType() == cmd))
{
if(OrderType() == OP_BUY)
if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), _Slippage, CLR_NONE))
Print("v128-2 > ", _Symbol, " > BUY -> ticket=", OrderTicket(),
" -> Erro (fechamento) #", GetLastError());
if(OrderType() == OP_SELL)
if(!OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), _Slippage, CLR_NONE))
Print("v128-2 > ", _Symbol, " > SELL -> ticket=", OrderTicket(),
" -> Erro (fechamento) #", GetLastError());
}
}
}

}

}



//=++============================================= ================++=
// contando o número de pedidos na direção
int CountOrders(int cmd)
{
int n = 0;
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if((OrderSymbol() == _Symbol)
&& (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2)
&& (OrderType() == cmd) ) n++;
}
}
retorno(n);
}


//=++============================================= ================++=
// busca por um pedido por mágica
bool FindOrders(int magic)
{
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == magic) )
retorno(verdadeiro);
}
}
retorna falso);
}


//=++============================================= ================++=
// calculando o nível de equilíbrio por mágica
void StopLoss_0(int de)
{
ponto de lucro duplo, lance, peça;
bool é;
duplo P3_comprar, P3_vender;
//
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(!( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2) )) continue;
//
if(OrderType() == OP_BUY)
{
oferta = MarketInfo(_Symbol, MODE_BID);
ponto de lucro = (lance - OrderOpenPrice()) / _Point;
é = ponto de lucro >= _StopLoss_0_Level + from;
P3_buy = ND( OrderOpenPrice() + from * _Point );
//
if( é && ( OrderStopLoss() == 0 || OrderStopLoss() < P3_buy ) )
{
Print("v128-2 b4 >", _Symbol, " | ", _Timeframe,
" -> Bid=", MarketInfo(_Symbol, MODE_BID),
" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(), " | P3_buy=", P3_buy,
" | d=", _StopLoss_0_Level, " | ponto de lucro=", ponto de lucro);
if(!OrderModify(OrderTicket(), OrderOpenPrice(), P3_buy, OrderTakeProfit(), 0, CLR_NONE))
Print("v128-2 b4 > ", _Symbol, " | ", _Timeframe,
" -> BUY > ticket=", OrderTicket(), " > Error (breakeven) #", GetLastError());
}
}
//
senão if(OrderType() == OP_SELL)
{
perguntar = MarketInfo(_Symbol, MODE_ASK);
ponto de lucro = (OrderOpenPrice() - perguntar) / _Point;
é = ponto de lucro >= _StopLoss_0_Level + from;
P3_sell = ND( OrderOpenPrice() - de * _Point );
//
if( is && ( OrderStopLoss() == 0 || OrderStopLoss() > P3_sell ) )
{
Print("v128-2 b4 >", _Symbol, " | ", _Timeframe,
" -> Pergunte =", MarketInfo(_Symbol, MODE_ASK),
" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(), " | P3_sell=", P3_sell,
" | d=", _StopLoss_0_Level, " | ponto de lucro=", ponto de lucro);
if(!OrderModify(OrderTicket(), OrderOpenPrice(), P3_sell, OrderTakeProfit(), 0, CLR_NONE))
Print("v128-2 b4 > ", _Symbol, " | ", _Timeframe,
" -> SELL -> ticket=", OrderTicket(), " > Error (breakeven) #", GetLastError());
}
}
}
}
}


//=++============================================= ================++=
// calculando o trailing stop por mágica
void TrailingStop(int from)
{
ponto de lucro duplo, lance, peça;
dobro do preço;
//
for(int i = OrdersTotal() - 1; i >= 0 ; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(!( (OrderSymbol() == _Symbol) && (OrderMagicNumber() == _Magic1 || OrderMagicNumber() == _Magic2) )) continue;
//
if(OrderType() == OP_BUY)
{
if(_IsTrailingStopProfit) fromprice = OrderOpenPrice() + from * _Point;
else fromprice = OrderStopLoss();
//
oferta = MarketInfo(_Symbol, MODE_BID);
ponto de lucro = (lance - ND(do preço)) / _Ponto;
//
if( ponto de lucro >= _TrailingStopLevel &&
lance > (OrderStopLoss() + (_TrailingStopLevel + _TrailingStopStep) * _Point) )
{
Print("v128-2 v4 >", _Symbol, " | ", _Timeframe,
" -> Bid=", MarketInfo(_Symbol, MODE_BID),
" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(),
" | d=", _TrailingStopLevel, " | ponto de lucro=", ponto de lucro);
if(!OrderModify(OrderTicket(), OrderOpenPrice(), ND(lance - (_TrailingStopLevel) * _Point),
OrderTakeProfit(), 0, CLR_NONE))
{
Print("v128-2 v4 >", _Symbol, " | ", _Timeframe,
" -> BUY > ticket=", OrderTicket(), " > Error (trailing stop) #", GetLastError());
}
}
}
//
senão if(OrderType() == OP_SELL)
{
if(_IsTrailingStopProfit) fromprice = OrderOpenPrice() - from * _Point;
else fromprice = OrderStopLoss();
//
perguntar = MarketInfo(_Symbol, MODE_ASK);
ponto de lucro = (ND(fromprice) - pedir) / _Point;
//
if( ponto de lucro >= _TrailingStopLevel &&
ask < (OrderStopLoss() - (_TrailingStopLevel + _TrailingStopStep) * _Point) )
{
Print("v128-2 v4 >", _Symbol, " | ", _Timeframe,
" -> Ask=", MarketInfo(_Symbol, MODE_ASK),
" | p/o=", OrderOpenPrice(), " | s/l=", OrderStopLoss(),
" | d=", _TrailingStopLevel, " | ponto de lucro=", ponto de lucro);
if(!OrderModify(OrderTicket(), OrderOpenPrice(), ND(perguntar + (_TrailingStopLevel) * _Point),
OrderTakeProfit(), 0, CLR_NONE))
{
Print("v128-2 v4 >", _Symbol, " | ", _Timeframe,
" -> VENDER > ticket=", OrderTicket(), " > Erro (trailing stop) #", GetLastError());
}
}
}
}
}
}


//=++============================================= ================++=
// Encontrando o fundo local. Retorna o preço
double FindPriceMinMax(bool isUp)
{
int deslocamento = 1;
preço duplo = 0, p0,p1,p2;
while(preço == 0)
{
p0 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 0, shift);
p1 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 1, shift);
p2 = iCustom(_Symbol, _Timeframe, "ZigZag", _ZZ_ExtDepth, _ZZ_ExtDeviation, _ZZ_ExtBackstep, 2, shift);
//Print("v128-2 >", _Symbol, " | ", _Timeframe,
// " > sift=", deslocamento, " | p0=", p0, " | p1=", p1, " | p2=", p2);
if(isUp)
{
if(p0 !=0 && p0 == p1) // vértice encontrado
preço = p0;
}
senão
{
if(p0 != 0 && p0 == p2) // fundo encontrado
preço = p0;
}
deslocamento++;
}
//Print("v128-2 >", _Symbol, " | ", _Timeframe,
// " -> return(preço)=", preço);
retorno(preço);
}


//================================================ ====================
// Lê a variável do arquivo.
// Se o arquivo não existir, cria um arquivo e grava a variável no arquivo
double _FileReadWriteDouble(string nome do arquivo, valor duplo)
{
int h1 = FileOpen(nome do arquivo, FILE_BIN);
if(h1 > 0)
{
valor = FileReadDouble(h1, DOUBLE_VALUE);
FileClose(h1);
}
senão
{
h1 = FileOpen(nome do arquivo, FILE_BIN|FILE_WRITE);
FileWriteDouble(h1, valor, DOUBLE_VALUE);
FileClose(h1);
}
valor de retorno);
}


//================================================ ====================
// Escreve a variável no arquivo
void _FileWriteDouble(string nome do arquivo, valor duplo)
{
int h1 = FileOpen(nome do arquivo, FILE_BIN|FILE_WRITE);
FileWriteDouble(h1, valor, DOUBLE_VALUE);
FileClose(h1);

}

 
Vitalie Postolache:

No código que você mostrou acima, a referência é para a atual TF, então do que estamos falando? Se você está se referindo ao M5 da W1, então escreva-o dessa forma.

Se você trabalha com o cronograma atual, então o preço fechado está flutuando em barra zero, e no resto - apenas um preço fechado, não muitos, como construir um histograma sobre um valor, eu não entendo.

Se você quiser desenhar uma imagem, use os botões de ícone na parte superior da caixa de edição, há muitos botões úteis lá, sugiro aprender.

Estou perguntando como obter as leituras máxima e mínima do indicador no período de tempo atual durante o atual,

Se você acha que sou preguiçoso e não quero procurar por fotos, não. Mas ainda não posso fazer isso. Clico com o botão direito do mouse na carta no terminal (Insta) - Salvar como figura - Carta ativa como está - transferida para MKL5 (a mesma figura de terminal é mostrada lá) - Código bbCode na linha inferior (seleciono e copio o código), então inseri este código na mensagem, depois de enviar a mensagem, deve haver uma figura na mensagem(este fórum não tem um mas exibe apenas o texto do código), tentei usar o botão "Fotos" (Ctrl+Alt+l) para selecionar o arquivo e o código baixado não pode ser colado nesta linha, sem screenshots que você não vai entender.


 
vitek2010:

Estou perguntando como obter as leituras mínimas e máximas do indicador no período de tempo atual durante o atual, eu dei telas como exemplo,

Se você acha que sou preguiçoso e não quero procurar por fotos, não. Mas ainda não posso fazer isso. Clico com o botão direito do mouse na carta no terminal (Insta) - Salvar como figura - Carta ativa como está - transferida para MKL5 (a mesma figura de terminal é mostrada lá) - código bbCode na linha inferior (seleciono e copio o código), então inseri este código na mensagem, depois de enviar a mensagem, deve haver uma figura na mensagem(este fórum não o tem e exibe apenas o texto do código), tentei usar o botão "Fotos" (Ctrl+Alt+l) para selecionar o arquivo e o código baixado não pode ser colado neste gráfico, mas sem capturas de tela você não vai entender.

Ao invés do nome do arquivo no computador local, você pode inserir um link, bem na mesma linha, onde eles escrevem o nome do arquivo, tudo funciona. Assim

Também é possível inserir um link na mensagem, mas sem tags, neste fórum as tags não funcionam. Assim.

Quanto a obter preços de um TF menor, há CopyRates e funções similares para cada preço individualmente.

Ela é copiada para a matriz, então no laço o tempo é comparado ao tempo de uma vela de um TF mais alto, se a vela mais baixa servir, então o preço é contado no indicador.
 
Há alguma maneira de ver os desenhos indicadores no testador, porque o gráfico mostra algo que eu perdi
Arquivos anexados:
Tester11.gif  18 kb
 
trader781:
Você pode ver os desenhos indicadores no testador, porque, a julgar pela tabela, eu perdi algo lá?

No testador, há um botão"Abrir gráfico". Para que será que serve?

Ou a caixa de seleção "Visualização".

 
Vitalie Postolache:

No testador, há um botão"Abrir gráfico". Para que será que serve?

Ou a caixa de seleção "Visualização".

Quero dizer, enquanto o gráfico está rolando, não há índices lá
 
trader781:
Enquanto a tabela está rolando, não há perus lá.
Nunca existiu. Você os coloca à mão quando precisa deles. O teste para pausar, o indicador para o gráfico, e depois girá-lo.