포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 105

 
Forexman77 :


안녕하세요!

비교적 오래된 주제를 꺼내서 죄송합니다. 코드로 모든 것이 명확해졌습니다.

이제 문제가 생겼습니다. 거래를 여는 방법입니다. 예를 들어, 주어진 범위 직후에 우리는

가격은 특정 포인트만큼 최대값보다 낮습니다. 우리는 거래를 시작합니다.

이 코드를 추가하고 테스터에서 실행하려고 시도했지만 거래가 열리지 않습니다.

어떻게 될 것인가?

이것이 작동하는 방식입니다. 왜냐하면 제가 직접 확인하지 않았기 때문입니다. 터미널은 현재 다른 EA를 최적화하는 중입니다.

 #define magic 123456789
extern int StartHour= 16 ;
extern int StartMinute= 1 ;
extern int StopHour= 17 ;
extern int StopMinute= 59 ;
bool Flag= true ; // Флаг разрешения открытия позиции, чтобы не плодить бесконечное число ордеров
double lots= 0.1 ; // размер лота
double sl= 100 ;   // стоплосс в пунктах
double tp= 100 ;   // тейкпрофит в пунктах
int ticket=- 1 ;
int OldBar;
int init() {
 sl= NormalizeDouble (sl* Point , Digits ); //стоплосс в поинтах
 tp= NormalizeDouble (tp* Point , Digits ); //тейкпрофит в поинтах
 return ( 0 );}
int deinit() { return ( 0 );}
int start(){
 static double Maximum=- 1 ;
 int StartTime=StartHour* 60 +StartMinute;
 int StopTime=StopHour* 60 +StopMinute;
 if (StopTime<=StartTime) { Print ( "ERROR: Неправильные времена" ); return ( 0 );}
 int CurrentMinutesFromDayStart=Hour()* 60 +Minute(); // Текущее время в минутах от начала дня
 datetime td=iTime( Symbol (), PERIOD_D1 , 0 ); // Время открытия дневного бара в секундах от 01.01.1970
 if (CurrentMinutesFromDayStart<StartTime) {Maximum=- 1 ;Flag= true ;} // Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер
// В 22:55 Принудительно закрываем ордер
 if (CurrentMinutesFromDayStart> 22 * 60 + 55 && ticket>= 0 ) if ( OrderSelect (ticket,SELECT_BY_TICKET)) if (OrderCloseTime()== 0 ) if (OrderClose(ticket,OrderLots(),Ask, 30 ,Magenta)) ticket=- 1 ;
 if (CurrentMinutesFromDayStart>StopTime && Maximum< 0 ) { // если максимум ещё не посчитан
   datetime ts=td+StartTime* 60 ; // начало временного диапазона в секундах от 01.01.1970
   int start= iBarShift( Symbol (), PERIOD_M1 ,ts, false ); // смещение бара, которому принадлежит ts
  ts=td+StopTime* 60 ; // конец временного диапазона в секундах от 01.01.1970
   int count= iBarShift( Symbol (), PERIOD_M1 ,ts, false ); // смещение бара, которому принадлежит ts
  count=start-count; // Сколко баров длится временной интервал
  Maximum=iHigh( Symbol (), PERIOD_M1 ,iHighest( Symbol (), PERIOD_M1 ,MODE_HIGH,count,start)); //Находим максимум на заданном временном интервале
 }
 if (Maximum> 0 && Flag) {
   double signal = Maximum - Bid;
   if (signal- 12 * Point > 0.0 ) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL                                       
   ticket= OrderSend ( Symbol (),OP_SELL,lots,Bid, 30 ,Ask+sl,Ask-tp, "My order" ,magic, 0 ,Blue);
   if (ticket>= 0 ) Flag= false ; // Ордер открылся, сегодня больше не открываем.         
  }
 }
 return ( 0 );
}
 
Sepulca :

이것이 작동하는 방식입니다. 왜냐하면 제가 직접 확인하지 않았기 때문입니다. 터미널은 현재 다른 EA를 최적화하는 중입니다.

고맙습니다!
 
Sepulca :

이것이 작동하는 방식입니다. 왜냐하면 제가 직접 확인하지 않았기 때문입니다. 터미널은 현재 다른 EA를 최적화하는 중입니다.


 // В 22:55 Принудительно закрываем ордер
 if (CurrentMinutesFromDayStart> 22 * 60 + 55 && ticket>= 0 ) if ( OrderSelect (ticket,SELECT_BY_TICKET)) if (OrderCloseTime()== 0 ) if (OrderClose(ticket,OrderLots(),Ask,
   30 ,Magenta)) ticket=- 1 ;
이 줄을 제거할 수 있습니까 아니면 없으면 작동하지 않습니까? 왜 주문을 닫는지 이해할 수 없습니까?
 
Forexman77 :

이 줄을 제거할 수 있습니까 아니면 없으면 작동하지 않습니까? 왜 주문을 닫는지 이해할 수 없습니까?

물론, 당신은 그것을 제거할 수 있습니다. 이것은 단지 테스트를 위한 것이며 많은 미결 주문을 생성하지 않습니다. 이것은 Expert Advisor의 튜토리얼 예시 일 뿐입니다. 그는 하루에 하나 이상의 SELL 주문을 열지 않습니다. 그리고 Expert Advisor에서 손절매, 이익 실현 또는 기타 조건에 따라 주문을 마감하는 방법을 결정해야 합니다. 많은 DC의 경우, 특히 금요일 23:00 이후의 스프레드가 급격히 증가하기 때문에 시간 22:55가 선택되었습니다. 하루에 두 개 이상의 주문을 여는 것으로 생각할 수 있습니다. 이것은 단방향 주문의 예입니다. 유추하여 최소값을 찾아야합니다. 이 코드는 예시이며, 나만의 어드바이저를 만드는 데 도움이 되었으면 합니다.)
 

안녕하세요!

나는 찻주전자이지만 적어도 코드에서 무언가를 직접 변경하고 싶습니다 ...

자신의 시간을 유감스럽게 생각하지 않는 사람을 알려주십시오 ...

몇 가지 질문이 있습니다.

1. EA는 어떻게 "손절매" 변수를 추가할 수 있습니까? 물론 변경될 수 있습니다.

2. 고문이 각 거래에 대해 의견을 추가할 수 있도록 어디에 무엇을 처방해야 합니까?

3. 어드바이저에 매직 넘버를 추가하는 방법은 무엇입니까?

 
Kot :

안녕하세요!

나는 찻주전자이지만 적어도 코드에서 무언가를 직접 변경하고 싶습니다 ...

자신의 시간을 유감스럽게 생각하지 않는 사람을 알려주십시오 ...

몇 가지 질문이 있습니다.

1. EA는 어떻게 "손절매" 변수를 추가할 수 있습니까? 물론 변경될 수 있습니다.

2. 고문이 각 거래에 대해 의견을 추가할 수 있도록 어디에 무엇을 처방해야 합니까?

3. 어드바이저에 매직 넘버를 추가하는 방법은 무엇입니까?

1. 외부 이중 StopLoss =100.0; // "손절매" 변수 추가

2-3. int ticket=OrderSend(Symbol, TypeOfOrder,LotsOfOrder, OpenPriceOfOrder, Slippage, OpenPriceOfOrder+/-StopLoss , OpenPriceOfOrder-/+TakeProfit, "주문 설명" , YourMagicNumber , 0, CLR_NONE) ;

4. 읽어라!

 
artmedia70 :

다음은 조인트입니다.

 for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderType() > 1 ) continue ;               // Все удалённые отложки нас не интересуют.. 
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
       if ( MathAbs (OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return ( 0 ); // ЗДЕСЬ ВЫХОДИМ ПРИ ПЕРВОМ ВСТРЕЧНОМ
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
사실, 그래, 아침에 나는 신선한 머리를 보았다. 여기서 필요한 것보다 더 많은 이익이 있는 첫 번째 주문이 기능 실행을 계속하라는 신호를 보낸다는 것이 밝혀졌습니다(즉, 건너뛰지 않음). 그러면 모든 것이 잘못될 것입니다.
 

안녕하세요!

패스의 부정적인 결과도 표시하도록 Expert Advisor의 최적화 를 설정하는 방법을 알려주십시오.

 
filpan :

안녕하세요!

패스의 부정적인 결과도 표시하도록 Expert Advisor 최적화를 설정하는 방법을 알려주시겠습니까?

최적화 결과가 있는 탭에서 결과를 마우스 오른쪽 버튼으로 클릭하고 "쓸모 없는 결과 표시 안 함"(또는 이와 유사한 것)을 선택 취소합니다.
 
찾았습니다, 감사합니다!