[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 315

 
Você sabe se o testador de estratégia tem algum limite para o número de passes? Eu corri o testador, na parte inferior esquerda acima da barra no início do teste foi: 0/1280 (25706). Contei 25 kopecks - esse é o número de todas as combinações possíveis. Mas ele terminou o teste quando foi: 1088/1280 (25706). Então ele só fez 1088 passes? O que significam os dois primeiros dígitos?
Além disso, conta de alguma forma estranhamente... quando ele acrescentou outro critério para 3 parâmetros, as 25 peças não aumentaram em 3 vezes, mas deram algo como 40 koz. É uma falha ou eu estou errado em algum lugar?
 
AndrejFX:
Você sabe se o testador de estratégia tem algum limite para o número de passes? Eu corri o testador, na parte inferior esquerda acima da barra no início do teste foi: 0/1280 (25706). Contei 25 kopecks - esse é o número de todas as combinações possíveis. Mas ele terminou o teste quando foi: 1088/1280 (25706). Então ele só fez 1088 passes? O que significam os dois primeiros dígitos?
Além disso, conta de alguma forma estranhamente... quando ele acrescentou outro critério para 3 parâmetros, as 25 peças não aumentaram em 3 vezes, mas deram algo como 40 koz. É uma falha ou eu estou errado em algum lugar?
leia o manual. ele é detalhado lá pessoalmente.
 

Ajudem a ordenar o código de rastreamento!!!

Se a rede de arrasto já abrir StopLosses à distância de "TrailingStop", de alto ou baixo nível, das velas anteriores. Uma vez iniciado o Expert Advisor, ele só trabalha com um pedido no primeiro comércio aberto. Uma vez que o StopLoss é acionado e a próxima negociação é aberta, a ordem StopLoss não é rastreada. Se eu entendi corretamente, isto é porque a variável "ORDER_SL" não é alterada e a condição de alterar a ordem não é cumprida? Em caso afirmativo, por que e como corrigi-lo?

Aqui está o código de rastreamento:

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);
int ORDER_Type=OrderType();
double ORDER_SL=OrderStopLoss();
double Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*Point;
double Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*Point;
            if (ORDER_Type==OP_BUY && ORDER_SL<Point_High){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }
            if (ORDER_Type==OP_SELL && ORDER_SL>Point_Low){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }

Aqui está a EA na íntegra:

Arquivos anexados:
 

Este código

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);

devem ser colocados em perls. O mais interessante é que funciona, mas somente no testador na primeira encomenda.

 
Christoff:

Ajudem com o rastreamento!!!

Caso a rede de arrasto já abra o StopLosses à distância do "TrailingStop", a partir do nível de Alto ou Baixo, os candelabros anteriores. Depois de iniciar o Expert Advisor trabalha somente com um pedido no primeiro comércio aberto. Uma vez que o StopLoss é acionado e a próxima negociação é aberta, a ordem StopLoss não é rastreada. Se eu entendi corretamente, isto é porque a variável "ORDER_SL" não é alterada e a condição de alterar a ordem não é cumprida? E se sim, por que e como corrigi-lo?

Aqui está o código da rede de arrasto:

Aqui está o Consultor Especialista na íntegra:

Antes de arrastá-lo, você precisa selecioná-lo. Primeiro é preciso passar por todas as posições abertas do terminal, selecionando aquelas que são abertas pelo Expert Advisor. A cada iteração do laço, se a ordem requerida for selecionada, chame sua rede de arrasto diretamente do laço. Somente neste caso, todas as posições abertas pelo Consultor Especialista serão arrastradas.

Aproximadamente assim:

void Trailing(string sy, int mn) 
{
   int      i, err, ORDER_Type, k=OrdersTotal();
   double   PointX, ORDER_SL, Point_High, Point_Low;
 
   if (sy=="0") sy=Symbol();
   int    dg=MarketInfo(sy, MODE_DIGITS);
   double pt=MarketInfo(sy, MODE_POINT);
   
   if(dg==5 || dg==3) PointX=pt*10;
   if(dg==4 || dg==2) PointX=pt;
   
   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (OrderMagicNumber()!=mn)   continue;
               
         ORDER_Type=OrderType();
         ORDER_SL=OrderStopLoss();
         Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*PointX;
         Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*PointX;
         if (ORDER_Type==OP_BUY)
            if (NormalizeDouble(Point_High-ORDER_SL,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         if (ORDER_Type==OP_SELL)
            if (NormalizeDouble(ORDER_SL-Point_Low,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         }
      if (!OrderSelect(i, SELECT_BY_POS)) {
         err=GetLastError();
         Print("FUNC Trailing: Ошибка выбора ордера - ", err);
         break;
         }
      }
   return;
}

Eu não olhei o código de sua rede de arrasto, mas o deixei como está (embora eu também deva mudá-lo - adicionar um cheque para que o StopLevel não seja excedido, ou talvez algo mais), eu só adicionei um loop em pedidos e normalização ao comparar valores duplos em seu código de rede de arrasto, e assim por diante ... algumas coisas úteis ... Você vai descobrir se você quiser :)

ZS. Eu não revisei o código, eu o escrevi como está, então pode haver erros. É apenas um exemplo.

Agora, naquele lugar de código onde você precisa arrastá-los, chame esta função:

Trailing(Symbol(), Magic);
Magia - número mágico definido no EA como um inteiro único para que ele possa distinguir suas próprias ordens das ordens de outro EA ou das ordens abertas manualmente onde não há nenhum número mágico.
Se deixarmos Symbol() na chamada de função, as posições do símbolo em que nossa EA está posicionada serão direcionadas.
Alternativamente, ao invés de Symbol(), você pode substituí-lo pelo nome do par de moedas cujas posições você deseja arrastar.
 
Por favor, ajude-me a trocar dados da maneira mais rápida entre terminais MT4 em um computador.
 
trave:
Por favor, ajude-me a trocar dados da maneira mais rápida entre terminais MT4 em um computador.

Se você precisa copiar negócios, então aqui está o copiador. Se você apenas trocar dados, então você precisa fazer uma dll
Arquivos anexados:
kopirowshik.zip  465 kb
 
drknn:

Se você quiser copiar o comércio, aqui está a copiadora. Se você só quer trocar dados, você tem que fazer uma dll

Boas festas para você... :-)))
 
Vinin:

Você não deveria estar postando coisas roubadas neste fórum. É um caminho para o banimento.

é no sentido figurativo, este peru foi finalizado por mim.
 
Roman.:
Boas festas para você... :-) ))
Vladimir, desde que você publicou uma compilação, você deve ter lidado com este assunto.
Você encontrou uma variante simples e pronta de transferir uma variável de terminal para terminal via memória, variável Windows, etc., ou seja, não via arquivo?
Como variante final, um indicador que extrai a linha Close[0] de outro terminal em um terminal on-line. Em uma tabela de carrapatos esta comparação pareceria muito clara.