무료로 어드바이저를 작성해 드립니다 - 페이지 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에 대한 팁을 주셔서 감사합니다. 나는 테스트 할 것이다.

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

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

고맙습니다

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