[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 174
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
>> Por favor, informe. Tenho um consultor especializado em uma janela (por exemplo, USDJPY) e preciso dele para definir setas(ObjectCreate) em um determinado momento em outras janelas abertas, por exemplo, AUDUSD, EURUSD e.t.c.
Se você olhar no ajudante ObjectCreate, você pode ver claramente que ele só funciona dentro de um único gráfico aberto, no qual o indicador ou o Expert Advisor está localizado. A saída pode ser a transferência de dados para o Expert Advisor na janela desejada através das variáveis ou arquivo global.
Se você olhar no ajudante ObjectCreate, você pode ver claramente que ele só funciona dentro de um único gráfico aberto, no qual o indicador ou o Expert Advisor está localizado. A saída pode ser a transferência de dados para o Expert Advisor na janela necessária através de variáveis globais ou de um arquivo.
Ou seja, não há como fazer isso de outra janela? >> Obrigado.
Como esta função de modificação de ordem pendente pode ser desativada através de variáveis externas?
Como esta função de modificação de ordem pendente pode ser desativada através de variáveis externas?
>> algo parecido com isto.
Obrigado! Vinin!
>> Vou tentar).
Programadores, por favor, ajudem-me, preciso de um EA para abrir pedidos, mesmo que já estejam abertos. Este é um canal EA. Toda vez que uma linha toca uma das linhas, a ordem correspondente deve ser aberta. Gostaria de agradecer antecipadamente a vocês.
//+------------------------------------------------------------------+
//| TradeChannel.mq4 |
//| Copyright © 2005, Yuri Makarov |
//| http://mak.tradersmind.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Yuri Makarov"
#property link "http://mak.tradersmind.com"
extern double Lots = 1.0;
extern int Slippage = 5;
extern int TimeOut = 10000;
double SetLevel(double Level, double NewLevel, string ObjName, int Style)
{
switch (Style)
{
case 1: // Buy Order line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(ObjName,OBJPROP_WIDTH,2);
break;
case 2: // Sell Order line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_SOLID);
ObjectSet(ObjName,OBJPROP_WIDTH,2);
break;
case 3: // Buy Stop line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 4: // Sell Stop line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DASH);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 5: // Buy Take line
ObjectSet(ObjName,OBJPROP_COLOR,Blue);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
case 6: // Sell Take line
ObjectSet(ObjName,OBJPROP_COLOR,Red);
ObjectSet(ObjName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet(ObjName,OBJPROP_WIDTH,1);
break;
}
if (MathAbs(NewLevel - Close[0]) < MathAbs(Level - Close[0])) return (NewLevel);
else return (Level);
}
int start()
{
int NumObj = ObjectsTotal();
double Spread = Ask - Bid;
double pBuy = 0;
double pSell = 0;
double pBuyStop = 0;
double pBuyTake = 0;
double pSellStop = 0;
double pSellTake = 0;
for (int i = 0; i < NumObj; i++)
{
string ObjName = ObjectName(i);
string ObjDesc = ObjectDescription(ObjName);
double Price = 0;
switch (ObjectType(ObjName))
{
case OBJ_HLINE:
Price = ObjectGet(ObjName,OBJPROP_PRICE1);
break;
case OBJ_TREND:
Price = ObjectGetValueByShift(ObjName,0);
break;
}
if (Price > 0)
{
if (ObjDesc == "Buy") pBuy = SetLevel(pBuy, Price, ObjName, 1); else
if (ObjDesc == "Sell") pSell = SetLevel(pSell, Price, ObjName, 2); else
if (ObjDesc == "Stop")
{
if (Price < Close[0]) pBuyStop = SetLevel(pBuyStop, Price, ObjName, 3);
else pSellStop = SetLevel(pSellStop, Price, ObjName, 4);
} else
if (ObjDesc == "Take")
{
if (Price > Close[0]) pBuyTake = SetLevel(pBuyTake, Price, ObjName, 5);
else pSellTake = SetLevel(pSellTake, Price, ObjName, 6);
}
}
}
int NumOrders = OrdersTotal();
int NumPos = 0;
for (i = 0; i < NumOrders; i++)
{
OrderSelect(i, SELECT_BY_POS);
if (OrderSymbol() != Symbol()) continue;
NumPos++;
double tp = OrderTakeProfit();
double sl = OrderStopLoss();
if (OrderType() == OP_BUY)
{
if (Bid > pSell && pSell > 0)
{
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Red);
Sleep(TimeOut);
return(0);
}
if (MathAbs(tp - pBuyTake) > Spread || MathAbs(sl - pBuyStop) > Spread)
{
OrderModify(OrderTicket(), Ask, pBuyStop, pBuyTake, 0);
Sleep(TimeOut);
return(0);
}
}
if (OrderType() == OP_SELL)
{
if (Ask < pBuy)
{
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
Sleep(TimeOut);
return(0);
}
if (MathAbs(tp - pSellTake) > Spread || MathAbs(sl - pSellStop) > Spread)
{
OrderModify(OrderTicket(), Bid, pSellStop, pSellTake, 0);
Sleep(TimeOut);
return(0);
}
}
}
if (NumPos > 0) return(0);
if ((pSell - pBuy) < Spread*2) return(0);
if (Bid > pSell && pSell > pBuyStop)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, pSellStop, pSellTake);
Sleep(TimeOut);
return(0);
}
if (Ask < pBuy && (pBuy < pSellStop || pSellStop == 0))
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, pBuyStop, pBuyTake);
Sleep(TimeOut);
return(0);
}
}
int init()
{
return(0);
}
int deinit()
{
return(0);
}
O mais provável é que você seja prejudicado por esta linha:
Podemos começar com isto. Isto deve ser removido.
E separar o mecanismo de entrada de compra e venda. Pegue a função de I.Kim (insira-a no final do código)
Então, a condição de abertura da transação será a compra:
E a condição para a abertura de um comércio de venda :
Este problema provavelmente já foi resolvido antes de 2003. Mas como alguém não sabe, eu vou compartilhar))))
Clique com o botão direito no gráfico - selecionar propriedades - guia geral - verificar escala fixa - OK
Depois passe o mouse sobre a escala de preços, clique com o botão esquerdo e mantenha-o pressionado, mova o mouse para cima/para baixo para ajustar a escala.
Você pode tê-lo na janela principal, para não ter que olhar para longe.
Canal EA
Quero pedir à EA que abra pedidos, mesmo que já estejam abertos. Este é um canal EA, sempre que uma linha ou outra for tocada, a ordem correspondente deve ser aberta. Creio que esta EA abrirá uma ordem e não abrirá outra até que ela feche.
Eu fiz o que descrevi no post acima. Eu inseri a função número de posições e substituí o bloco de abertura de posição no final por este:
Agora a EA pode ocupar pelo menos 2 posições ao mesmo tempo.
Desculpe, não posso testá-lo pois você esqueceu de anexar o indicador que desenha os canais.