Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 722
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
Sim, bem... Onde posso encontrar um corretor assim... Pode dar-me um link?
Boa tarde,
Pergunta:
Pode dizer-me por favor porque não posso colocar uma compra pendente?
request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(offset)*point;
Se offset=1 , então apareceráum erro:
paragem de compra falhada 0,10 AUDNZD.m a 1,03748 [preço inválido],ou seja,pequeno nível preço (em meucaso )
Quando a mesma "ordem de execução" é colocada logo a seguir
request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)
tudo funciona bem (ou seja, a encomenda é feita):
comprar 0,10 a 1,03747 [#2 comprar 0,10 AUDNZD.m a 1,03747]
Porque não é aceite o pedido de uma encomenda pendente(1.03748), ou seja,a 1.03747 é colocado, mas a 1.03748 não o é? (porqueSYMBOL_ASK tem em conta o spread e a compensação - a compensação do preço actual para colocar a encomenda, em pontos, é aumentada em 1)
Mas em compensação=100: preço pendente BUY_STOP = 1,03847 - já funciona
Obrigado.Boa tarde,
Pergunta:
Pode dizer-me por favor porque não posso colocar uma compra pendente?
request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(offset)*point;
Se offset=1 , então apareceráum erro:
paragem de compra falhada 0,10 AUDNZD.m a 1,03748 [Preço inválido], ou seja,nível de preço pequeno (no meu caso)
Quando estabeleço uma "ordem de execução" imediatamente após
request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)
tudo funciona bem (ou seja, a encomenda é feita):
comprar 0,10 a 1,03747 [#2 comprar 0,10 AUDNZD.m a 1,03747]
Porque é que o pedido de uma encomenda pendente(1.03748) não é aceite, ou seja,em 1.03747 a encomenda é feita, mas em 1.03748 a encomenda é pequena?
Mas se offset=100: preço BUY_STOP pendente = 1,03847, já funciona.
Obrigado.Já respondeu à sua própria pergunta.
Existe um parâmetro "stoplevel" -- distância mínima necessária entre o preço actual e o preço de colocar uma ordem pendente -- para cada símbolo tem o seu próprio valor e é definido nas condições de negociação
Вы же сами и ответили на свой вопрос.
Есть такой параметр stoplevel -- минимально необходимое расстояние от текущей цены до цены установки отложенного ордера -- для каждого инструмента своё значение и задаётся в торговых условиях
Então seria provavelmente justo escrever
preço =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)*point
Embora, se escreveu "...a partir do preço actual ", o que é que isso tem a ver com o spread? Que está incluído em SYMBOL_ASK (porque SYMBOL_ASK = preço aberto + spread).
Anexei um exemplo para o ajudar...
Estou a ver, o exemplo ajudou. Obrigado.
Agora, aqui vai uma pergunta.
Quando aumento o lote, a dada altura não há fundos livres suficientes, e preciso de abrir com o aumento do lote.
Ou seja, entrar no lote máximo, tanto quanto o FreeMargin permite.
Como escrever esta condição: se não houver fundos suficientes para abrir a posição com lote calculado, a função deve devolver o máximo lote possível para abrir a posição.
{
double Lot=FirstLot;
if(DoublingCount<=0) return Lot;
double MaxLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
double MainLot=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
if(Lot<MainLot)Lot=MainLot;
if(Lot>MaxLot)Lot=MaxLot;
double lt1=Lot;
HistorySelect(0,TimeCurrent());
if(HistoryOrdersTotal()==0)return(Lot);
double cl=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-1),ORDER_PRICE_OPEN);
double op=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_PRICE_OPEN);
long typeor=HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_TYPE);
if(typeor==ORDER_TYPE_BUY)
{
if(op>cl)
{
if(ud<DoublingCount)
{
lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*_C_;
ud++;
}
else ud=0;
}
else ud=0;
}
if(typeor==ORDER_TYPE_SELL)
{
if(cl>op)
{
if(ud<DoublingCount)
{
lt1=HistoryOrderGetDouble(HistoryOrderGetTicket(HistoryOrdersTotal()-2),ORDER_VOLUME_INITIAL)*_C_;
ud++;
}
else ud=0;
}
else ud=0;
}
if(lt1>MaxLot)lt1=MaxLot;
lt1=LotCheck(lt1);
return(lt1);
}
//+------------------------------------------------------------------+}
Estou a ver, o exemplo ajudou. Obrigado.
Agora esta questão.
Quando aumento o lote, a dada altura não há fundos livres suficientes, e preciso de abrir com um lote maior.
Ou seja, entrar no lote máximo, tanto quanto o FreeMargin permite.
Como escrever esta condição: se não houver fundos suficientes para abrir a posição com lote calculado, então a função deve retornar o máximo lote possível para abrir a posição.
double Mgn,Lot=0,BID,ASK;
BID=SymbolInfoDouble(_Symbol,SYMBOL_BID);
ASK=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,ASK,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
Marina, que tal isto?
Aplica duas opções de cálculo - uma para abrir VENDA, e outra para abrir COMPRA
if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1,ASK,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot=AccountInfoDouble(ACCOUNT_MARGIN_FREE)/Mgn;
Não, não é.
Não precisa apenas de calcular o lote máximo possível, mas também de verificar o mínimo permitido, porque pode acontecer que o lote mínimo seja 0,01, e a margem permite abrir apenas 0,009, depois atormentar o servidor com pedidos que nunca serão aceites, mas eles podem tomar medidas contra si)
Não, não é.
Não precisa apenas de calcular o lote máximo possível, mas também de verificar o mínimo permitido, porque pode acontecer que o lote mínimo 0,01, e a margem lhe permita abrir apenas 0,009, depois torturar os pedidos do servidor, que nunca aceitará, mas a acção sobre si e pode tomar)
Escreva o código completo, como deve ser, e eu verei ao mesmo tempo....?
Aprenderei sempre contigo e estarei sempre de olho em ti para garantir que as respostas estão completas.
Eu costumava trabalhar como supervisor técnico, não se preocupe, tudo vai ficar bem!
Juntos somos uma equipa!
Estou a ver, o exemplo ajudou. Obrigado.
Agora esta questão.
Quando aumento o lote, a dada altura não há fundos livres suficientes, e preciso de abrir com um lote maior.
Ou seja, entrar no lote máximo, tanto quanto o FreeMargin permite.
Como escrever esta condição: se não houver fundos suficientes para abrir a posição com lote calculado, a função deve devolver o máximo lote possível para abrir a posição.