Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 538

 
denis77515:

Não recuse um recém-chegado a programar, olhe o código, para ver se ele está escrito corretamente. Que não é muito preguiçoso para lidar com isso. Não posso testá-lo no Testador de Estratégia porque é multimoeda. Arquivo com o código e os indicadores anexados ao arquivo.


Eu trabalhei em uma única função para você criar conjuntos de símbolos ligados e número de pedidos (posições abertas) para comprar e vender, teste o roteiro abrindo algumas posições em uma demonstração
string Smbl[];
int CntBuy[],CntSell[];
void OnStart()
 {
    if(CountBuySell(Smbl, CntSell, CntBuy))
       for(int i=0; i<ArraySize(Smbl); i++) PrintFormat(" Symbol %s CntBuy %d CntSell %d", Smbl[i], CntBuy[i], CntSell[i]);
 }
//-------------------
bool CountBuySell(string &symb[], int &cnt_sell[], int &cnt_buy[])
{
   int ot,n,N=0,f=0,cb=0,cs=0;
   string symbol;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         
         ot=OrderType()+1; if(ot>2)  continue;                       // пропускаем лимит ордера
         symbol=""; symbol=OrderSymbol(); if (symbol=="") continue;  // убедились что символ выбран
         f=0; cb=0; cs=0;                                            // обнулили счетчики и флаг символа
         for (n=0; n<N; n++) if (symbol==symb[n]) f=1;               // если в массиве символ OrderSymbol() уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
         if (f==0)                                                   // такого символа symbol=OrderSymbol() еще не было, увеличим размерность массивов под новый символ и запишем этот символ
         {
            N++; 
            ArrayResize(symb,N); ArrayResize(cnt_buy,N); ArrayResize(cnt_sell,N);
            symb[N-1]=symbol; cnt_buy[N-1]=0.0; cnt_sell[N-1]=0;
         }
         
         if(ot==1) cb++;  // OP_BUY   для выбранного символа
         else      cs++;  // OP_SELL
         
        // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
        // такоим образом для каждого индекса всех 3 массивов будет соответствовать  конкретный символ и количество позиций покупки и продажи для него
         for (n=0; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs;  }
         
      }
   }
   if(N>0) return(1);   // есть открытые позиции
   return(0);           // позиций нет
}
 
evillive:

Estou tentando escrever um simples EA que fecha todas as posições em minha conta quando atinge os valores especificados de lucro ou perda na moeda do depósito (abro por vários símbolos), mas fecha as posições assim que elas aparecem (((

Eu não entendo o que está errado:



Confira isto.


lucro interno externo = 30;

Exterior int Magic=0;

int CurProfit;

bool externo CurSymbolOnly = falso;


int start() // Início de funções especiais

{

//contador de lucro de todos os pedidos

duplo p1;

int i1, kk1=OrdensTotal(), pr1=0;

para (i1=0; i1<kk1; i1++)

{

se(OrderSelect(i1, SELECT_BY_POS, MODE_TRADES))

{

se (!CurSymbolOnly || OrderSymbol()==Symbol())

{

p1=MarketInfo(OrderSymbol(), MODE_POINT);

if (p1==0) if (StringFind(OrderSymbol(), Symbol())<0) p1=0,0001; caso contrário p1=0,01;

se (OrderType()==OP_BUY)

{

pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0);

}

se (OrderType()==OP_SELL)

{

pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0);

}

}

}

}

CurProfit=pr1;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

se (lucro<==pr1)

{

FecharPoswithMaxProfitInCurrency();

}

retorno(0);

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///fecha do mais caro para o mais barato

void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1)

{

duplo pr=0;

int i5, k=OrdersTotal(), np=-1;

se (sy=="0") sy=Símbolo();

para (i5=k-1; i5>=0; i5--)

{

se (OrderSelect(i5, SELECT_BY_POS, MODE_TRADES))

{

se ((OrderSymbol()==sy ||| sy==") && (op<0 || OrderType()==op))

{

se (mn<0 || OrderMagicNumber()==mn)

{

se (pr<OrderProfit()+OrderSwap())

{

pr=OrderProfit()+OrderSwap();

np=i5;

}

}

}

}

}

se (np>=0)

{

se (OrderSelect(np, SELECT_BY_POS, MODE_TRADES))

{

{for (int i=OrdensTotal()-1; i>=0; i--)

{

se (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) quebrar;

se (OrderType()==OP_BUY ) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),9);

se (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9);

}

}

}

}

closeotlojnie();

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//closeotlojnie

closeotlojnie() vazio

{

para (int i=OrdensTotal()-1; i>=0; i--)

{

se (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) quebrar;

se (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());

se (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());

se (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());

se (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

}

}

 
GSB:
Eu trabalhei uma única função para você criar conjuntos de símbolos ligados e número de pedidos (posições abertas) para comprar e vender, testar o roteiro abrindo várias posições em uma demonstração


Obrigado por seu tempo, mas é um pouco complicado para mim, desculpe pela intrusão. Explicar-me o quê, onde, como? Como eles dizem nos dedos.


Eu nunca estive acostumado a comercializar este tipo de roteiros.

 
GSB, pako, obrigado, tenho estado distraído, não reparo em coisas como essa...
 
denis77515:

Obrigado por seu tempo, mas é um pouco complicado para mim, desculpe pela intrusão. Explicar-me o quê, onde, como? Como eles dizem nos dedos.


Eu experimentei e negociei manualmente em uma conta demo.


Como você o testou em uma conta demo se só há erros? O código que foi apresentado não podia ser comercializado. Eu adicionei comentários ao código. Você tem que fazer todo o trabalho sozinho, sem conhecimento e trabalho duro. Você não pode negociar nas bolsas de valores, especialmente forex. O resultado será inequívoco. Além dos problemas acima mencionados, você deve usar o sistema comercial que você escolheu. Após 2-3 meses os resultados serão mostrados, então você decidirá se este sistema é adequado para você pessoalmente e para o comércio em princípio.
 
Obrigado, vamos trabalhar duro!
 
Pergunta aos moderadores ou administradores: Posso mudar meu apelido? Tentei me registrar na MQL5, mas descobri que meu apelido já estava sendo usado lá, então tive que me registrar sob outro. Eu quero ter o mesmo apelido aqui e ali. É claro que também posso me recadastrar aqui, mas comecei a postar algo na Base de Código e quero manter a autoria de meus trabalhos (e postagens) simplesmente "mudando meu nome". Isso é possível?
 
Spy:
Pergunta aos moderadores ou administradores: Posso mudar meu apelido? Tentei me registrar na MQL5, mas descobri que meu apelido já estava sendo usado lá, então tive que me registrar sob outro. Eu quero ter o mesmo apelido aqui e ali. É claro que também posso me recadastrar aqui, mas comecei a postar algo na Base de Código e quero manter a autoria de meus trabalhos (e postagens) simplesmente "mudando meu nome". Isso é possível?

Escreva para Rosha em uma mensagem privada. Espero que você a encontre. Diga qual é o problema
 

OK, obrigado.

 

Olá! Tendo EAs em uma versão anterior do MetaTrader I atualizou o terminal. Depois disso, voltei a 509. Assim, os EAs "foram" em 60... Bild, eles voltaram à versão terminal na qual foram escritos.

A questão é: O que fazer com aqueles EAs que param de abrir negócios no Strategy Tester depois de "voltar" e aqueles que não podem mais ser testados (o botão start no Strategy Tester simplesmente não responde a um clique)?