![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
Olá, pessoal
Tenho uma pergunta aqui... como posso mudar o seguinte;
duplo MaxLot externo = 1,50;
duplo max_lot = GetMaxLot(OP_BUY, OP_SELLL);
se (max_lot >= MaxLot) lote = CalcHedgeLot(order_type);
(tipo_de_ordem)]: ", lote);
if (lote == -1) retorno (lote);
lote = NormalizeDuplo(lote, LotPrec);
if (lote > MaxLot) lote = MaxLot;
if (lote < LoteMínLote) lote = LoteMínLote;
retorno (lote);
}
a verificação acima para OP_BUY AND OP_SELL
pergunta: como posso mudar para qualquer OP_BUY ou qualquer OP_SELL
apreciemVocê deve modificar o código da função GetMaxLot(), ou talvez você possa usar GetMaxLot(OP_BUY, OP_BUY); e GetMaxLot(OP_SELLL, OP_SELLL); (depende do código - pode fazer assim ou não).
Mas acho que vale a pena tentar![](https://c.mql5.com/forextsd/smiles/smile.png)
Goen
É isto que você está procurando?
-----------
int bars_count=WindowBarsPerChart();
int bar=WindowFirstVisibleBar();
-----------
GoenObrigado, Goen .
Você deve modificar o código da função GetMaxLot(), ou talvez você possa usar GetMaxLot(OP_BUY, OP_BUY); e GetMaxLot(OP_SELLL, OP_SELLL); (depende do código - pode fazer assim ou não).
Mas eu acho que vale a pena tentar![](https://c.mql5.com/forextsd/smiles/smile.png)
Goenobrigado por responder...
o que preciso mudar aqui? agradeço sua ajuda
duplo GetMaxLot(int tipo1, int tipo2)
{
duplo max_lot = 0,0;
int cnt = OrderTotal();
para (int i=0; i < cnt; i++)
{
se (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continuar;
se (OrderSymbol() != Symbol()) continuar;
se (OrderMagicNumber() != Magic) continuar;
if (OrderType() != type1 && OrderType() != type2) continue;
if (max_lot == 0 || OrderLots() >= max_lot)
{
max_lot = OrderLots();
}
}
retorno (max_lot);
}
um pouco perdido aqui...
como adicionar alerta ao indicador tis?
Eu tenho um indicador de MA crossover que funciona muito bem, mas ele não me faz perder muita coisa, você pode me ensinar como adicionar alerta a este indicador, pois eu não sei nada sobre o meta-código...
aqui está o código para o indicador juntos se o próprio indicador, obrigado...
/*[[
Nome := Cruz EMA
Autor := Hapsa
Link := http://www.metaquotes.net/
Janela separada := Não
Janela separada := Não
Primeira cor := Vermelho
Primeiro tipo de desenho := Símbolo
Primeiro Símbolo := 108
Use os segundos dados := Sim
Segunda Cor := VerdeOscuroVivo
Segundo tipo de desenho := Símbolo
Segundo Símbolo := 108
]]*/
#direitos de propriedade intelectual "Hapsa
#ligação de propriedade ""
externo int SlowPeriod=20;
FastPeriod=5;
#números indicadores de propriedade 3
#janela_do_cartão_indicador de propriedade
#indicador de propriedade_cores1 Vermelho
#indicador de propriedade_color2 Verde
duplo L20[];
duplo L50[];
duplo turno=0,val1=0,val2=0;
int init()
{
IndicatorBuffers(3);
SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(0,108);
SetIndexArrow(1, 108);
SetIndexBuffer(0,L20);
SetIndexBuffer(1,L50);
//---- indicadores
//----
retorno(0);
}
int start()
{
int counted_bars=IndicatorCounted();
//----
int i = Barras - contadas_barras - 1;
enquanto (i>=0)
{
val1=0;
val2=0;
duplo iMaSlowPrevious = iMA(NULL,0,SlowPeriod,0,MODE_EMA, PRICE_CLOSE, i-1);
duplo iMaSlowCurrent = iMA(NULL,0,SlowPeriod,0,MODE_EMA, PRICE_CLOSE, i);
duplo iMaFastPrevious = iMA(NULL,0,FastPeriod,0,MODE_EMA, PRICE_CLOSE, i-1);
duplo iMaFastCurrent = iMA(NULL,0,FastPeriod,0,MODE_EMA, PRICE_CLOSE, i);
if (iMaFastPreviousiMaSlowCurrent ) val1=High;
if (iMaFastPrevious>iMaSlowPrevious && iMaFastCurrent<iMaSlowCurrent ) val2=Low;
L20=val1+5*Ponto;
L50=val2-5*Ponto;
i--;
}
//----
retorno(0);
}
obrigado por responder...
o que preciso mudar aqui? agradeço sua ajuda
duplo GetMaxLot(int tipo1, int tipo2)
{
duplo max_lot = 0,0;
int cnt = OrderTotal();
para (int i=0; i < cnt; i++)
{
se (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continuar;
se (OrderSymbol() != Symbol()) continuar;
se (OrderMagicNumber() != Magic) continuar;
if (OrderType() != type1 && OrderType() != type2) continue;
if (max_lot == 0 || OrderLots() >= max_lot)
{
max_lot = OrderLots();
}
}
retorno (max_lot);
}Sim, você pode usar GetMaxLot(OP_BUY,OP_BUY); para obter o maxlot somente para compra de comércio aberto, e GetMaxLot(OP_SELL,OP_SELLL); para obter o maxlot somente para venda de comércio aberto.
Você pode simplificar este código "if (max_lot == 0 || OrderLots() >= max_lot)" com "if (OrderLots() > max_lot)".
Porque se max_lot = 0 automaticamente será inferior a qualquer lote das negociações abertas. E assinar ">=" muda com ">" porque se tiver o mesmo valor, não há necessidade de atualizar o max_lot com o mesmo valor, esforço inútil. Ele só será atualizado se o novo valor for maior que max_lot.
Ao alterar esse código, ele poderá tornar seu processo mais rápido.
Goen
questão de perda de estoque
Olá,
Sou novo em tudo isso, mas estou tentando entender como tudo isso funciona.
Agora estou tentando escrever um EA e receio estar perdendo algo fundamental.
Se, em meu código, eu substituir
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0",",MAGIC,0,Red);
com
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+Point*10,0,"",MAGIC,0,Red);
E teste esta nova versão no testador de estratégia, eu recebo menos pedidos. Como adicionar uma perda de estoque pode diminuir o número de entradas de pedidos? Posso imaginar que o número aumenta no caso em que a adição de uma ordem de parada faz com que as ordens saiam mais cedo e assim novas ordens podem ser adicionadas mais rapidamente, mas as ordens LESS...?
Alguma idéia?
Obrigado
Olá,
Sou novo em tudo isso, mas estou tentando entender como tudo isso funciona.
Agora estou tentando escrever um EA e receio estar perdendo algo fundamental.
Se, em meu código, eu substituir
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,"",ordercount,0,Red);
com
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+Point*10,0,"",ordercount,0,Red);
E teste esta nova versão no testador de estratégia, eu recebo menos pedidos. Como adicionar uma perda de estoque pode diminuir o número de entradas de pedidos? Posso imaginar que o número aumenta no caso em que a adição de uma ordem de parada faz com que as ordens saiam mais cedo e assim novas ordens podem ser adicionadas mais rapidamente, mas as ordens LESS...?
Alguma idéia?
Obrigado10 pips podem estar muito próximos do limite de stop imposto pelo corretor (varia entre corretores) - ou seja, se for um mínimo de 10 pips e o preço oscilar 1 pip dentro disto à medida que a ordem é colocada, a ordem será rejeitada...
Omelete, você está certo, aumentando o tampo da tampa, obrigado! :-)
#property indicator_color2 Yellow
extern bool TrendDirectionUp=true;
string Color1;
string Color2;
int init() {
if(TrendDirectionUp==true)//Conditionj 1
{
Color1=Yellow;
Color2=CLR_NONE;
}
if(TrendDirectionUp==false)//Condition2
{
Color1=CLR_NONE;
Color2=Magenta;
}
SetIndexStyle(0,DRAW_ARROW,0,star_size,Color1);
SetIndexStyle(1,DRAW_ARROW,0,star_size,Color2);
SetIndexArrow(0,172);//333
SetIndexArrow(1,172);//334
SetIndexBuffer(0,b1);
SetIndexBuffer(1,b2);
return(0);
}Neste momento, ambas as cores 1 e 2 mostram 'preto' no gráfico!!
Algum Guru especialista pode me ajudar a resolver este problema???
Obrigado com antecedência!