무료로 어드바이저를 작성해 드립니다 - 페이지 149

 
DDM77 :
봇 성능 확인 후 정식 주문 가능

라인이 좋네요 :)

 
Александр :

몇 가지 변경 사항

정확히 무엇이 바뀌었나요?

 

안녕 동료들.

주제가 여전히 관련성이 있습니까? 무료로 로봇을 완성할 준비가 된 고객이 있습니까?

.mq4 코딩을 잘하는 조수가 필요합니다.

나 자신도 프로그래밍하지만 mq4에서는 상황이 좋지 않습니다. 설명하는 방법을 모르거나 제대로 작동하지 않는 작업이 있습니다.

간단한 스캘핑 전략(M15-M30)과 처음에 작성된 로봇이 있습니다. 그는 마음에 가져와야합니다.

전략(내 것이 아니라 광고로 간주되지 않도록 사이트에 대한 링크를 제공하지 않음):

RVI 50

EMA 9

EMA 100

롱 포지션 진입 조건:

EMA9는 아래에서 위로 EMA100을 교차하는 반면 RVI 표시기는 아래에서 위로 0선을 교차하거나 0선 위에 있어야 합니다. 이러한 조건이 충족되면 매수 포지션을 엽니다. 손절매 는 가장 가까운 저점보다 2-3포인트 아래에 배치됩니다. 이익실현 은 손절매보다 1.5~2배 높습니다.

숏 포지션 진입 조건:

EMA9는 위에서 아래로 EMA100을 교차하는 반면 RVI 표시기는 위에서 아래로 0선을 교차하거나 0선 아래에 있어야 합니다. 이러한 조건이 충족되면 우리는 매도 포지션을 엽니다. 손절매 는 가장 가까운 최대값 바로 위에 위치합니다. 이익실현 은 손절매보다 1.5~2배 높습니다.


원시 로봇을 작성했지만 병합됩니다. 작동하지 않는 것을 끝내는 것이 필요하며, 아마도 누군가가 잘못된 신호를 필터링하는 방법에 대한 힌트를 가지고 있습니까? (물론 그들은) ...

작동하지 않고 추가해야 하는 것:

1. 손절매와 이익실현은 각각 100과 200으로 고정되어 있습니다. 이 수준으로는 충분하지 않습니다. 마지막 X 막대에 대한 양초 세트에서 최소 / 최대 정지 손실 계산 을 계산해야합니다 ( X 막대의 수는 입력 매개 변수로 설정됨), 그것에서 테이크를 계산, 나는 어떻게 직접 구현합니다. 가장 중요한 점 , 왜냐하면 신호가 정확하고 이익이 더 많이 갔을지라도 로봇은 정류장의 폐쇄로 인해 정확하게 병합됩니다.

2. 어떤 이유로 로봇은 (이 포럼에서 빌림) 막대에서 주문을 여는 것을 확인하지만 작동하지 않습니다. 수표를 수정하고 작동하지 않는 이유를 파악 하십시오.

3. BU가 특정 수준(예: 계산된 TP의 1/2)에 도달하면 후행 정지 (로봇의 수신 매개변수)를 추가합니다(예: 0.3에서 매개변수에 BU 계수를 지정할 수도 있습니다. 0.7). 로봇에 별도의 후행이 설명되어 있지만(코드는 이 포럼에서 가져옴) BU는 고려하지 않습니다. 또한 어떤 이유로 테스터에서 작동하지 않는지 원인을 파악해야 합니다.

4. 자금 관리 없음, 추가하고 싶은데 방법을 모르겠습니다. 예를 들어 활성 주문이 있는 경우 한 방향으로 5개 이상의 주문을 여는 것을 금지합니다. 또는 계정 잔액/자금 설정에서 거래를 금지합니다.

5. 마틴게일. 신호 필터링 ... (선택 사항)


사실 모든 것. 로봇의 파일은 개인으로 제공할 준비가 되어 있으니 협조를 원하시는 분들이 계시다면. 또는 포럼에서 프로그래밍, BU 및 자금 관리에 대한 내용을 읽기 위해 다른 주제를 걷어차십시오. 내가 직접 추가하면 1점만 남습니다.

 

1번 포인트를 알아냈습니다. iLowest / iHighest를 사용하여 막대의 역사에 따라 가격을 계산하는 방법을 찾았습니다)) 역사의 지난 반년 동안 수익성 지표가 약간 증가했습니다) 병합 된 역사 (

포인트 2는 아직 명확하지 않습니다.

나는 후행을 이해하기 시작했습니다. 아마도 내가 스스로 "승리"할 것입니다. 수익성은 여전히 약간 성장해야하기 때문입니다. 큰 테이크가 있는 거래가 있는데, 이 거래는 이익이 있을 수 있지만 가격이 단순히 도달하지 않고 스톱으로 닫힙니다.

 

두 번째 점에서:

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

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

   }

세 번째 점에서:

 //трейлинг рыночных ордеров, стоплосс держится на расстоянии 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 );
   }
 

후행 정지는 기대치를 높일 수 있지만 수익성을 향상시키지는 못합니다. 시끄러운 시장에서는 이익이 부족할 것입니다. 가격이 새로 뒤따른 정지점에 도달하지 않았더라면 이익은 더 높았을 수 있었을 것입니다.

의식적으로 거래를 성사시키는 방향으로 생각하는 것이 좋습니다. 열릴 신호를 찾고 있는데 왜 닫힘을 우연에 맡깁니까?
 

포인트 2와 3에 대한 팁을 주셔서 감사합니다. 나는 테스트 할 것이다.

닫기에 관해서는 반대 신호가 트리거되면 물론 닫을 수 있습니다. 그러면 더 큰 효과를 줄 생각을 해야 합니다.

시끄러운 시장에서 이익이 부족한 부분에 대해서는 글쎄, 나는 이유가 있지만 일정 수준에 도달하면. 부족하지만 큰 손실도 없을 것입니다. 일반적으로 그것에 대해서도 생각해야합니다))

고맙습니다

 

Dmitry, 후행 - 이 정보는 이미 많은 사람들이 한 번 이상 테스트했습니다. 맨 위에는 후행 코드가 있으며 아마도 가장 좋은 코드일 것입니다. 그러나 그에게도 이러한 단점이 없는 것은 아닙니다.

시도해야 할 모든 것을 시도하십시오.

 
Ivan :

정확히 무엇이 바뀌었나요?

이미 어딘가에 주어졌습니다. 여기 또 하나가 있습니다.

파일:
 
Дмитрий Хлыстов :

포인트 2와 3에 대한 팁을 주셔서 감사합니다. 나는 테스트 할 것이다.

닫기에 관해서는 반대 신호가 트리거되면 물론 닫을 수 있습니다. 그러면 더 큰 효과를 줄 생각을 해야 합니다.

시끄러운 시장에서 이익이 부족한 부분에 대해서는 글쎄, 나는 이유가 있지만 일정 수준에 도달하면. 부족하지만 큰 손실도 없을 것입니다. 일반적으로 그것에 대해서도 생각해야합니다))

고맙습니다

시장은 포인트로 움직이지 않습니다. 점 단위 이동을 기반으로 하지 않습니다. 레벨에서 레벨로 이동합니다. 거리는 추세 시간으로 가장 잘 측정됩니다. 틱 단위일 수도 있지만 포인트 단위는 아닙니다.