Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1618
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Você pode fazer isso desta forma, sem usar bibliotecas
Obrigado!
O mercado agora está fechado, a TimeCurrent() não muda. Verificação do criptograma, funciona nos fins de semana
Por que torná-lo dependente do tiquetaque? O botão não deve depender deles.
Olá.
Eu quero testar algumas estratégias, ninguém as tem por mais de 2 meses.
Entendo que os volumes são grandes, é por isso que os corretores não permitem o download. Somente pares básicos.
Talvez alguém ainda tenha algum nas pastas do servidor? Pelo menos por 1 ano.
Olá! Decidimos escrever aqui ... talvez alguém responda!!! Em CodeBase ... há muito tempo atrás foi ... foi colocado o indicador ... nem o nome não se lembra ... nem o autor. A essência foi esta ... Configurar manualmente a linha horizontal ... e mostra quantas vezes o preço cruzou a linha em uma e outras direções ... e mostra estatísticas sobre este preço ... Canalizado duas vezes 66 páginas, mas não conseguiu encontrá-lo ... alguém pode se lembrar ou ter alguma!!! POR FAVOR, precisa muito disso!!!
Não é essa:
Não, não é...o da MT4 foi...Obrigado))))
Bom dia a todos!!!!
Você pode me ajudar a escrever o código para a grade EA, o princípio do fechamento da grade é simples: todas as ordens com lucro em todas as ordens com um prejuízo mais um lucro do preço de breakeven.
Estou tentando realizar uma idéia para calcular a média e fechar apenas os pedidos mínimos e máximos na grade em um determinado nível de drawdown, reduzindo assim o nível de drawdown.
Aqui está uma parte do código para a abertura de ordens de grupo:
se (CountTrade() < MaxOrders)
{
int order_type = FindLastOrderType();
se (order_type == OP_BUY)
{
preço = FindLastOrderPrice(OP_BUY);
if(Ask<== preço - (NormalizeDuplo(ATR/ DivisorVolatilidade/Ponto, 0)*Ponto))
{
lasttlot = NormalizeDouble(Lots()*MathPow( MultiplierParameter, OrdersTotal()), 2);
bilhete = OrderSend(Symbol(), OP_BUY, lastlot, Ask, slip, 0, 0, "Group Order", Magic, 0, Blue);
se (bilhete < 1)
Imprimir ("Buy order error");
ModifyOrders(OP_BUY);
}
}
se (order_type == OP_SELL)
{
preço = FindLastOrderPrice(OP_SELLL);
if(Bid>= preço + (NormalizeDuplo(ATR/ DivisorVolatilidade/Ponto, 0)*Ponto))
{
lasttlot = NormalizeDouble(Lots()*MathPow( MultiplierParameter, OrdersTotal()), 2);
bilhete = OrderSend(Symbol(), OP_SELL, lastlot, Bid, slip, 0, 0, "Group Order", Magic, 0, Red);
se (bilhete < 1)
Imprimir ("Sell order error!");
ModifyOrders(OP_SELL);
}
}
}
Aqui estáa parte do código onde entra o comando de modificação de ordens. Aqui cruzei a modificação de ordens por "Todas as ordens com lucro e todas as ordens com prejuízo" e "Médias de ordens min e max".
//+----------------------------------------------------------------------------+
//| Modificação de pedidos |
//+----------------------------------------------------------------------------+
nulo ModifyOrders(int otype)
{
duplo
BuyPriceMax = 0, BuyPriceMin = 0, BuyPriceMaxLot = 0, BuyPriceMinLot = 0,
SelPriceMin = 0, SelPriceMax = 0, SelPriceMinLot = 0, SelPriceMaxLot = 0;
int
BuyPriceMaxTic = 0, BuyPriceMinTic = 0, SelPriceMaxTic = 0, SelPriceMinTic = 0;
duplo
op = 0, lt = 0, order_lots = 0;
int
tk = 0, b = 0, s = 0;
preço = 0;tp = 0;
for(int i = OrderTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == Magic)
if(OrderSymbol() == Symbol() && OrderType() == otype)
{
op = NormalizeDuplo(Preço Aberto de Pedido(), Dígitos())
lt = NormalizeDouble(OrderLots(), 2);
tk = OrderTicket();
if(otype == OP_BUY)
{
b++;
if(op > BuyPriceMax || BuyPriceMax == 0)
{
BuyPriceMax = op;
BuyPriceMaxLot = lt;
BuyPriceMaxTic = tk;
}
if(op < BuyPriceMin || BuyPriceMin == 0)
{
BuyPriceMin = op;
BuyPriceMinLot = lt;
BuyPriceMinTic = tk;
}
}
if(otype == OP_SELL)
{
s++;
if(op > SelPriceMax || SelPriceMax == 0)
{
SelPriceMax = op;
SelPriceMaxLot = lt;
SelPriceMaxTic = tk;
}
if(op < SelPriceMin || SelPriceMin == 0)
{
SelPriceMin = op;
SelPriceMinLot = lt;
SelPriceMinTic = tk;
}
}
if (otype == OP_BUY || otype == OP_SELL)
{
preço += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
//*************************************************************//
duplo AwerageBuyPrice = 0, AwerageSelPrice = 0, avg_price = 0;
if(b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
AwerageBuyPrice = NormalizeDouble((BuyPriceMax*BuyPriceMaxLot + BuyPriceMin*BuyPriceMinLot)/
(BuyPriceMaxLot + BuyPriceMinLot) + TakeProfitMinMaxOrder* Ponto(), Dígitos()));
if(s >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
AwerageSelPrice = NormalizeDouble((SelPriceMax * SelPriceMaxLot + SelPriceMin * SelPriceMinLot)/
(SelPriceMaxLot + SelPriceMinLot) - TakeProfitMinMaxOrder* Point(), Digits());
se (Drawdown < DrawdownClosingMinMaxOrder)
avg_price = NormalizeDouble(price / order_lots, Digits);
//*************************************************************//
for(int i = OrderTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == Magic)
if(OrderSymbol() == Símbolo())
{
op = NormalizeDuplo(Preço Aberto de Pedido(), Dígitos())
tp = NormalizeDuplo(OrderTakeProfit(), Dígitos())
lt = NormalizeDouble(OrderLots(), 2);
tk = OrderTicket();
if(otype == OP_BUY && b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
{
if(tk == BuyPriceMaxTic || tk == BuyPriceMinTic)
if(Bid < AwerageBuyPrice && tp != AwerageBuyPrice)
if(!OrderModify(tk, op, OrderStopLoss(), AwerageBuyPrice, 0, clrRed))
Imprimir("OrderModify error #", GetLastError());
if(tk != BuyPriceMaxTic && tk != BuyPriceMinTic && tp != 0)
if(!OrderModify(tk, op, 0, 0, 0, clrRed))
Imprimir("OrderModify error #", GetLastError())
}
if(otype == OP_SELL && s >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
{
if(tk == SelPriceMaxTic || tk == SelPriceMinTic)
if(Ask > AwerageSelPrice && tp != AwerageSelPrice)
if(!OrderModify(tk, op, OrderStopLoss(), AwerageSelPrice, 0, clrRed))
Imprimir("OrderModify error #", GetLastError());
if(tk != SelPriceMaxTic && tk != SelPriceMinTic && tp != 0)
if(!OrderModify(tk, op, 0, 0, 0, clrRed))
Imprimir("OrderModify error #", GetLastError());
}
se (Drawdown < DrawdownClosingMinMaxOrder)
if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Dígitos);
if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Dígitos);
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
Imprimir("Pedidos modificados com sucesso!");
senão Imprimir ("Erro de modificação do pedido!");
}
}
}
O resultado é o seguinte: a modificação das ordens de grupo até o nível de saque permitido é feita de forma normal e após o nível de saque permitido, elas são calculadas como média e fecham min e max como esperado,
Mas quando o sorteio tiver diminuído, o novo TakeProfit não quer ser definido.
Aqui está o registro com os códigos de erro.
Se você não souber o que fazer com este erro, não se preocupe, eu o ajudarei a corrigi-lo!
Bom dia a todos!!!!
Use
Use
Você pode ser mais específico?