Por alguma razão, quando sua biblioteca está conectada, o operador externo deixa de funcionar, ou seja, as variáveis são definidas, tudo se compila normalmente e, em princípio, a EA funciona, mas ao mesmo tempo, a EA não tem parâmetros ao iniciar o tipo, mesmo que haja muitos parâmetros. Qual pode ser a razão para isso?
Acrescentei uma variável j a esta função para os penúltimos ofícios.
Se considerarmos que as ordens que foram fechadas são consideradas em OrdersHistoryTotal() de acordo com a hora de fechamento da direita -> esquerda (a última para a direita):
double GetProfitLastClosePos (string sy="", int op=-1, int mn=-1,
int j=0) // Искомый (по номеру) ордер от последнего закрытого
{
int k = OrdersHistoryTotal(), li_cnt = 0;
//----if (sy == "0" || sy == "") sy = Symbol();
for (int i = k - 1; i >= 0; i--)
{
if (!OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderSymbol() != sy) continue;
if (OrderType() > 1) continue;
if (op >= 0) if (OrderType() != op) continue;
if (mn >= 0) if (OrderMagicNumber() != mn) continue;
if (j == li_cnt) return (OrderProfit());
li_cnt++;
}
//----return (-1.0);
}
A função retorna o lucro j-ésimo da última ordem fechada, "filtrado" por símbolo, magik, tipo. E os números são contados a partir do 0º.
Se levarmos em conta que as ordens fechadas são contadas em OrdersHistoryTotal() pelo tempo de fechamento da direita -> esquerda (a última extrema direita):
A função retorna o lucro j-ésimo da última ordem fechada, "filtrado" por instrumento, Magik, tipo. E os números são contados a partir do 0º.
Precisava de uma função para fechar ordens de Compra e Venda de lotes iguais por contra-ordens, quando seu lucro vai para +. Eu tentei fazer esta função, mas saiu um erro 4108 (bilhetes errados)
Você pode me dizer qual é o problema?
//+------------------------------------------------------------------+int fCloseBu(){
// Закрываем встречныеdouble LotB,LotS,PrB=0,PrS=0;
int TicketB,TicketS,i, k=OrdersTotal();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==Symbol() || Symbol()=="")) {
if (Magic_N<0 || OrderMagicNumber()==Magic_N) {
//----------if(OrderType()==OP_BUY){
if (PrB<OrderProfit()+OrderSwap()+OrderCommission()) {
PrB=OrderProfit()+OrderSwap()+OrderCommission();
LotB=OrderLots();
TicketB=OrderTicket();
}
}
if(OrderType()==OP_SELL){
if (PrS<OrderProfit()+OrderSwap()+OrderCommission()) {
PrS=OrderProfit()+OrderSwap()+OrderCommission();
LotS=OrderLots();
TicketS=OrderTicket();
}
}
if (PrB>0 && PrS>0 && LotB==LotS) {
OrderCloseBy(TicketB,TicketS,CLR_NONE);
Print("Закрываем пару встречных ордеров c одинаковыми лотами в плюсе");
}
}
}
}
}
//-------------return(0);
}
//+------------------------------------------------------------------+
Olá!
Por alguma razão, quando sua biblioteca está conectada, o operador externo deixa de funcionar, ou seja, as variáveis são definidas, tudo se compila normalmente e, em princípio, a EA funciona, mas ao mesmo tempo, a EA não tem parâmetros ao iniciar o tipo, mesmo que haja muitos parâmetros. Qual pode ser a razão para isso?
Encontrar no código
#property libraryE excluir.
Adicionei uma variável j a esta função, para a penúltima transação.
double GetProfitLastClosePos(string sy="", int op=-1, int mn=-1, int j=0) {Acrescentei uma variável j a esta função para os penúltimos ofícios.
Se considerarmos que as ordens que foram fechadas são consideradas em OrdersHistoryTotal() de acordo com a hora de fechamento da direita -> esquerda (a última para a direita):
A função retorna o lucro j-ésimo da última ordem fechada, "filtrado" por símbolo, magik, tipo. E os números são contados a partir do 0º.
Se levarmos em conta que as ordens fechadas são contadas em OrdersHistoryTotal() pelo tempo de fechamento da direita -> esquerda (a última extrema direita):
A função retorna o lucro j-ésimo da última ordem fechada, "filtrado" por instrumento, Magik, tipo. E os números são contados a partir do 0º.
Olá a todos.
Precisava de uma função para fechar ordens de Compra e Venda de lotes iguais por contra-ordens, quando seu lucro vai para +. Eu tentei fazer esta função, mas saiu um erro 4108 (bilhetes errados)
Você pode me dizer qual é o problema?
As ordens devem ser fechadas quando todo o ciclo de verificações é feito, isto é, após a declaração, e não dentro.
Obrigado! Se alguém mais precisar de tal função, ela será assim:
Há alguns tutoriais em vídeo sobre este idioma?