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á Igor!
Você poderia mudar o e-OpenByTime EA ou escrever um novo, ou sugerir um pronto :))))
Eu preciso de uma EA que coloque as pausas em diferentes direções no tempo X por N pontos do preço!
Olá, Igor!
Você tem um roteiro que desenha segmentos de linha horizontais em X e Y pips a partir do sinal?
Deixe-me explicar: há sinais de compra/venda (cruzamento de muwings, fractal, etc.).
O roteiro estabelece 4 parâmetros, por exemplo:
- 300 pips para parar,
- 500 pips para levar,
- 10 barras = comprimento das barras,
- onde e como levar os sinais - referência ao indicador de sinal, inserção de condições para os sinais... Este ponto é algo a ser pensado!
O roteiro desenha 2 linhas em cada sinal de compra:
1) a primeira ("stop") mais baixa em 300 pips do preço de abertura da barra de sinal;
2) segundo ("Take") maior em 500 pontos a partir do preço de abertura da barra de sinal
3) as linhas começam na barra de sinal e terminam na décima barra.
É o mesmo no caso dos sinais de Venda, apenas os travessões das linhas são invertidos.
Acho que tal visualização será útil para uma estimativa preliminar do "signal-stop".
Cumprimentos, Vadim.
Olá Igor!
Pergunta 1.
Há um erro 138 em sua função OpenPosition() - ERR_REQUOTE é pausado:
se (err!=135) Dormir(1000*7,7);
Embora seja recomendado na documentação atualizar os dados e tentar novamente de imediato (o preço sai, quero abrir uma posição o mais rápido possível)))
Que esteja correto, então:
if (err!=135 && err!=138) Sleep(1000*7,7);?
Ou talvez esteja me faltando algo?
Pergunta 2.
Favor informar como especificar corretamente o parâmetro Slippage igual a 5 pontos na função OrderSend() se minha corretora (Alpari) der 5 casas decimais.
- "50"?
- ou "5"?
Pergunta 1.
Em sua função OpenPosition() erro 138 - ERR_REQUOTE é pausado:
se (err!=135) Dormir(1000*7,7);
Embora seja recomendado na documentação atualizar os dados e tentar novamente de imediato (o preço sai, quero abrir uma posição o mais rápido possível)))
Que esteja correto, então:
if (err!=135 && err!=138) Sleep(1000*7,7);?
Sim, está tudo bem! Você pode fazer isso também... Obrigado!
Pergunta 2.
Por favor, diga-me como definir corretamente o parâmetro Slippage igual a 5 pontos na função OrderSend() se minha corretora (Alpari) der 5 casas decimais.
- "50"?
- Ou é "5"?
Olá Igor,
você poderia por favor ajudar a refinar sua função GetProfitFromDateInCurrency(). Preciso dele para calcular o lucro até mesmo de pedidos fechados apenas. Uso o fechamento parcial (splitting) de pedidos e a função CloseBy para fechar o saldo de um pedido existente. Para determinar se um número par ou ímpar de pedidos foi fechado, uso a fórmula:
double x, y; --------- Suponha
x=MathFloor(OrderLots()/0.02); a. Se lotes 0.04/0.02=2 --- b. Se lotes 0.03/0.02=1
y=x*0.02; a. 2*0,02=0,04 --- б. 1*0,02=0,02
if (y===OrderLots()) ---------- а. 0,04==0,04 --- b. 0,02!=0,04
XLots=y; Se igual, então XLots recebe o valor de y
Isto funciona (não consegui pensar em uma maneira melhor de dividir em pares/equites e não recebi uma dica quando perguntei).
Em seguida, a chamada de função real (a que eu fiz da sua)
ClOrdProf=GetProfitFromDateInCurrency("", -1, -1, XTime, XLots);
E minha vã tentativa de adicionar à sua função a condição de que o lucro deve ser calculado se os lotes estiverem iguais:
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0, double lt=-1)
{
double p=0;
int i, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy ||| sy===") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELLL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime()) {
if (OrderLots()==lt) {
p+=OrderProfit()+OrderComission()+OrderSwap();
}
}
}
}
}
}
} }
return(p);
}
Não quer contar.
1. Estou errado em algum lugar da função?
2. O fato de os pedidos serem fechados pela OrdCloseBy poderia ter algum efeito?
-1 todas as ordens, 0 - lotes pares, 1 - lotes ímpares, então
substitui
if (OrderLots()==lt) {
p+=OrderProfit()+OrderComission()+OrderSwap()
}
a
if (lt == -1){
p+=OrderProfit()+OrderComission()+OrderSwap();
} else {
int test = OrderLors() * 100;
if (lt == test % 2) {
p+=OrderProfit()+OrderComission()+OrderSwap();
} else {
p+=OrderProfit()+OrderComission()+OrderSwap();
}
}
Digamos que na função GetProfitFromDateInCurrency() o parâmetro int lt leva três valores de bandeira
Obrigado, seu método de cálculo de lote por modulo está correto, vou usá-lo mais tarde... Mas aqui é interessante, acontece que a função que eu refinei funciona... de certa forma. Adicionei Alerta para ver as mudanças de "p+=" e ele calcula tudo corretamente. Mas o valor ClOrdProf do qual vamos tirar informações não aparecerá: Alerta ("ClOrdProf= ",ClOrdProf);. No código, é o seguinte:
int start()
{
........................
bool
ClOrdProf=falso; //valor lógico
........................
ClOrdProf=GetProfitFromDateInCurrency(",-1,-1,XTime,XLots); //function call
se (ClOrdProf==verdadeiro)
Alerta ("ClOrdProf=",ClOrdProf); - não é atualizado no log
.........................
retorno; //saída do início()
}
// Função para calcular o lucro de pedidos fechados
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0, double lt=-1)
{
duplo p=0;
int i, k=OrdersHistoryTotal();
se (sy=="0") sy=Símbolo();
para (i=0; i<k; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
se ((OrderSymbol()==sy ||| sy==") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
se (mn<0 || OrderMagicNumber()==mn) {
se (dt<OrderCloseTime()) {
se (OrderLots()==lt) {
p+=OrderProfit()+OrderComission()+OrderSwap();
Alerta ("p= ", p); - atualizado em log
}
}
}
}
}
}
}
retorno(p);
}
Não consigo descobrir o que está errado...
Engraçado, não é, engraçado... engraçado para você e até para mim...(Vladimir Semyonovich)
Originalmente o ClOrdProf não é um bool, mas um duplo. E deveria haver "se (ClOrdProf>0 || ClOrdProf<0)" - a segunda parte, começando com "ou", para contar em caso de lucro negativo...o que eu chamo de "olho lavado" - eu mesmo não vi o que está na superfície imediatamente.
Graças a Keekkenen pela ajuda no cálculo de lotes pares/ímpares.
Graças ao Igor, pela possibilidade de atualizar sua função.
Функция TicketNearPos().
Эта функция возвращает тикет ближайшей к рынку позиции. В качестве критерия "близости" позиции выступает минимум расстояния в пунктах между ценой открытия позиции и текущей рыночной ценой. Отбор учитываемых позиций задаётся внешними параметрами:
- sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
- op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
- mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
ЗЫ. Во вложении скрипт для тестирования функции TicketNearPos().Preço de mercado = preço de ordem em aberto, então esta ordem não é mais levada em conta por esta função.
Eu tinha que acrescentar esta simples condição ao código.
Esta condição também ajudará nas funções similares TypeNearPos() e PriceOpenNearPos().