Escreverei um conselheiro sem custos - página 149

 
DDM77:
Depois de o bot ter sido testado, é possível uma encomenda oficial

Lindamente colocado :)

 
Александр:

um par de alterações

O que foi exactamente alterado?

 

Olá, colegas.

O tema ainda é relevante? Há algum patrono que esteja pronto para desenvolver o robô gratuitamente?

Preciso de um assistente que seja um bom codificador .mq4.

Eu próprio sou programador, mas não sou muito bom com mq4. Existem alguns problemas, que ou não sei como descrever, ou não funcionam.

Tenho uma estratégia simples de escalpelização (M15-M30) e, inicialmente, um robô escrito. Precisa de ser melhorado.

Não darei o link para o meu site, não será considerado como meu anúncio:

RVI 50

EMA 9

EMA 100

Condições de entrada para uma posição longa:

EMA9 cruza EMA100 de baixo para cima, RVI também deve cruzar a linha zero de baixo para cima ou estar acima da linha zero. Se estas condições forem cumpridas, abrimos uma posição de compra. Colocamosuma paragem de perda 2-3 pontos abaixo do mínimo próximo. O Take Profit é 1,5-2 vezes superior ao Stop Loss.

Condições de entrada para uma posição curta:

O EMA9 cruza o EMA100 de cima para baixo, enquanto o indicador RVI deve também cruzar a linha de zero de cima para baixo ou estar abaixo da linha de zero. Se estas condições forem cumpridas, abrimos uma posição de venda. Uma paragem de perda é colocada um pouco acima do máximo próximo. O Take Profit é 1,5-2 vezes superior ao Stop Loss.


Escrevi um robô primitivo mas está a perder porque tenho de corrigir algo que não funciona, mais talvez alguém tenha algumas ideias de como filtrar sinais falsos? (claro que sim)...

O que não funciona e temos de o consertar:

1. O Stop Loss e Take Profit estão definidos para fixar 100 e 200 respectivamente, estes níveis não são suficientes. Devemos calcular uma perda de paragem mínima/máxima do conjunto de castiçais para as últimas X barras (definir X barras como parâmetro de entrada) e tirar proveito disso. O ponto mais importante, porque o robô falha exactamente por ter fechado na paragem, embora o sinal estivesse correcto e o lucro tivesse ido mais longe.

2. O robô, por alguma razão, abre (no testador) várias encomendas na mesma barra dentro de algumas carraças, apesar de estar a verificar a abertura de uma encomenda na mesma barra (emprestada neste fórum), mas não está a funcionar. Temos de modificar a verificação e ver porque não funciona.

3. Completar a adição de uma paragem móvel (parâmetros de entrada do robot) quando o BU atinge um determinado nível, por exemplo, 1/2 do TP calculado (também é possível especificar o factor BU nos parâmetros, por exemplo, de 0,3 a 0,7). Separadamente, o rastreio é descrito no robô (o código é retirado deste fórum), mas não leva em conta a BU. Além disso, por alguma razão não funciona no Testador de Estratégia, tenho de compreender porquê.

4. Quero acrescentar a gestão de dinheiro, mas não sei como. Por exemplo, a proibição de abrir encomendas mais de 5 numa direcção, se estiverem activas. Ou proibir o comércio ao estabelecer o equilíbrio/equidade por conta.

5. Martingale. Filtragem de sinais. (Opcional).


Isto é tudo. O ficheiro robô está pronto a ser submetido a pessoal se houver interesse em cooperação. Se estiver interessado, estou pronto a partilhar o ficheiro do robô comercial numa mensagem pessoal, se houver algum comerciante interessado. Eu próprio terminarei, ficando apenas 1 ponto.

 

Resolvi o item 1. descobri como ler o preço no histórico de barras através do iLowest/iHighest )) durante o último semestre de história o indicador de rentabilidade aumentou ligeiramente) em toda a história está a perder (

Ainda não compreendo o ponto 2.

Comecei a lidar com o trailing, talvez eu "bata") a rentabilidade deve crescer um pouco, porque há negócios com grandes lucros, aos quais o preço simplesmente não chega e se fecha no fim, embora possa haver algum lucro.

 

sobre o segundo ponto:

datetime current, last=0;
int shift=1;

void OnTick()
   {
   current=iTime(symbol,frame,shift);
   //ограничение на торговлю вне начала бара
   if(last==current) return;
   last=current;

   }

sobre o terceiro ponto:

//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних History баров 
int DoTrailOrder(int ePosition, int eMagicNumber, double eDistance, int eHistory, string eSymbol, int eTimeFrame)
   {
   if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) return(1);
   int eType=OrderType();
   if(eType!=OP_BUY && eType!=OP_SELL) return(0);
   if(OrderMagicNumber()!=eMagicNumber) return(0);
   if(OrderSymbol()!=eSymbol) return(0);
   //наблюдаем начиная с бара следующим за баром открытия
   if(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) return(0);
   int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS);
   double ePoint=MarketInfo(eSymbol,MODE_POINT);
   double eSpread=MarketInfo(eSymbol,MODE_SPREAD);
   double eExtremum;
   if(eType==OP_BUY)
      {
      //стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eHistory
      eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eHistory,1));
      //расстояние от минимума до StopLoss должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance*ePoint) return(0);
      //расстояние от минимума до цены открытия должно превысить TrailingLevel
      if(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance*ePoint) return(0);
      //новый стоп должен быть не ближе к текущей цене, чем на два спреда
      if(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)+eDistance*ePoint-eExtremum,eDigits)<=2*eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrBlue)) return(-1);
      }
   if(eType==OP_SELL)
      {
      //стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eHistory
      eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eHistory,1));
      if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint && OrderStopLoss()!=0) return(0);
      if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint) return(0);
      //один спред между Ask и Bid сократился
      if(NormalizeDouble(eExtremum+eDistance*ePoint-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread*ePoint) return(0);
      if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+(eDistance+eSpread)*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrRed)) return(-1);
      }
   return(0);
   }
 

As paragens de arrasto podem aumentar as expectativas, mas não melhoram a rentabilidade. Haverá um fraco desempenho num mercado ruidoso, onde os preços derrubam uma nova paragem, quando sem isso poderia ter havido mais lucro.

É melhor pensar em fechar o comércio deliberadamente. Está à procura de sinais para abrir, então porquê lançar o fecho para arbitragem?
 

Obrigado pelas dicas sobre os pontos 2,3.

Quanto ao fecho, é claro que é possível fechar quando o sinal oposto dispara, preciso de pensar... o que dará mais efeito

quero seguir o rasto de algo quando ele atinge um certo nível. será um inconveniente mas também não quero ter um grande abatimento. tenho de pensar nisso))

obrigado

 

Dimitri, sobre o trilho - esta é informação já testada por muitas pessoas mais do que uma vez. O código de trailing acima é provavelmente o melhor de todos. Mas não é sem este inconveniente.

Experimente, tudo deve ser experimentado.

 
Ivan:

O que foi exactamente alterado?

Já o dei em algum lugar antes. Aqui está mais.

Arquivos anexados:
 
Дмитрий Хлыстов:

Obrigado pelas dicas sobre os pontos 2,3.

Quanto ao fecho, é claro que é possível fechar quando o sinal oposto dispara, preciso de pensar... o que dará mais efeito

quero seguir o rasto de algo quando ele atinge um certo nível. será um inconveniente mas também não quero ter um grande abatimento. tenho de pensar nisso))

obrigado

O mercado não se move por pontos, ou seja, não se baseia em pontos. Passa de nível a nível. A distância é melhor medida em tempo de tendência. Talvez em carraças, mas não em pips.