이것이 작동하는 방식입니다. 왜냐하면 제가 직접 확인하지 않았기 때문입니다. 터미널은 현재 다른 EA를 최적화하는 중입니다.
#define magic 123456789externint StartHour= 16 ;
externint StartMinute= 1 ;
externint StopHour= 17 ;
externint 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(){
staticdouble 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.1970if (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.1970int start= iBarShift( Symbol (), PERIOD_M1 ,ts, false ); // смещение бара, которому принадлежит ts
ts=td+StopTime* 60 ; // конец временного диапазона в секундах от 01.01.1970int 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 );
}
이 줄을 제거할 수 있습니까 아니면 없으면 작동하지 않습니까? 왜 주문을 닫는지 이해할 수 없습니까?
물론, 당신은 그것을 제거할 수 있습니다. 이것은 단지 테스트를 위한 것이며 많은 미결 주문을 생성하지 않습니다. 이것은 Expert Advisor의 튜토리얼 예시 일 뿐입니다. 그는 하루에 하나 이상의 SELL 주문을 열지 않습니다. 그리고 Expert Advisor에서 손절매, 이익 실현 또는 기타 조건에 따라 주문을 마감하는 방법을 결정해야 합니다. 많은 DC의 경우, 특히 금요일 23:00 이후의 스프레드가 급격히 증가하기 때문에 시간 22:55가 선택되었습니다. 하루에 두 개 이상의 주문을 여는 것으로 생각할 수 있습니다. 이것은 단방향 주문의 예입니다. 유추하여 최소값을 찾아야합니다. 이 코드는 예시이며, 나만의 어드바이저를 만드는 데 도움이 되었으면 합니다.)
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(); // Тогда время открытия последней закрытой позиции из истории
}
사실, 그래, 아침에 나는 신선한 머리를 보았다. 여기서 필요한 것보다 더 많은 이익이 있는 첫 번째 주문이 기능 실행을 계속하라는 신호를 보낸다는 것이 밝혀졌습니다(즉, 건너뛰지 않음). 그러면 모든 것이 잘못될 것입니다.
안녕하세요!
비교적 오래된 주제를 꺼내서 죄송합니다. 코드로 모든 것이 명확해졌습니다.
이제 문제가 생겼습니다. 거래를 여는 방법입니다. 예를 들어, 주어진 범위 직후에 우리는
가격은 특정 포인트만큼 최대값보다 낮습니다. 우리는 거래를 시작합니다.
이 코드를 추가하고 테스터에서 실행하려고 시도했지만 거래가 열리지 않습니다.
어떻게 될 것인가?
이것이 작동하는 방식입니다. 왜냐하면 제가 직접 확인하지 않았기 때문입니다. 터미널은 현재 다른 EA를 최적화하는 중입니다.
이것이 작동하는 방식입니다. 왜냐하면 제가 직접 확인하지 않았기 때문입니다. 터미널은 현재 다른 EA를 최적화하는 중입니다.
이것이 작동하는 방식입니다. 왜냐하면 제가 직접 확인하지 않았기 때문입니다. 터미널은 현재 다른 EA를 최적화하는 중입니다.
이 줄을 제거할 수 있습니까 아니면 없으면 작동하지 않습니까? 왜 주문을 닫는지 이해할 수 없습니까?
이 줄을 제거할 수 있습니까 아니면 없으면 작동하지 않습니까? 왜 주문을 닫는지 이해할 수 없습니까?
물론, 당신은 그것을 제거할 수 있습니다. 이것은 단지 테스트를 위한 것이며 많은 미결 주문을 생성하지 않습니다. 이것은 Expert Advisor의 튜토리얼 예시 일 뿐입니다. 그는 하루에 하나 이상의 SELL 주문을 열지 않습니다. 그리고 Expert Advisor에서 손절매, 이익 실현 또는 기타 조건에 따라 주문을 마감하는 방법을 결정해야 합니다. 많은 DC의 경우, 특히 금요일 23:00 이후의 스프레드가 급격히 증가하기 때문에 시간 22:55가 선택되었습니다. 하루에 두 개 이상의 주문을 여는 것으로 생각할 수 있습니다. 이것은 단방향 주문의 예입니다. 유추하여 최소값을 찾아야합니다. 이 코드는 예시이며, 나만의 어드바이저를 만드는 데 도움이 되었으면 합니다.)
안녕하세요!
나는 찻주전자이지만 적어도 코드에서 무언가를 직접 변경하고 싶습니다 ...
자신의 시간을 유감스럽게 생각하지 않는 사람을 알려주십시오 ...
몇 가지 질문이 있습니다.
1. EA는 어떻게 "손절매" 변수를 추가할 수 있습니까? 물론 변경될 수 있습니다.
2. 고문이 각 거래에 대해 의견을 추가할 수 있도록 어디에 무엇을 처방해야 합니까?
3. 어드바이저에 매직 넘버를 추가하는 방법은 무엇입니까?
안녕하세요!
나는 찻주전자이지만 적어도 코드에서 무언가를 직접 변경하고 싶습니다 ...
자신의 시간을 유감스럽게 생각하지 않는 사람을 알려주십시오 ...
몇 가지 질문이 있습니다.
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. 읽어라!
다음은 조인트입니다.
안녕하세요!
패스의 부정적인 결과도 표시하도록 Expert Advisor의 최적화 를 설정하는 방법을 알려주십시오.
안녕하세요!
패스의 부정적인 결과도 표시하도록 Expert Advisor 최적화를 설정하는 방법을 알려주시겠습니까?