그리고 이것으로 "만화"를 만들자 (다중 통화) - 페이지 7

 
Swan >> :

그것은

true StopLoss에 새 값이 할당된 경우

그렇지 않으면 순서가 수정됩니다.

틀릴건 없지만 나다 아니면 십자가를 떼거나 바지를 입는다)

바로 이해가 되지 않았습니다)) ... 상황에 따라 스톱이 설정되지 않을 수 있습니다!

아마 그냥 다른 제거?? 논리가 통하지 않는 것 같은데... 1번이면 충분하다면 2번 조건이 왜 필요한가요?

StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

그 쯤...

 if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
if ( StopLoss - Ask > StopLevel - 0.5 * Point ) StopLoss = MathMin ( s0 , s1 ) ;
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;


백조 >> :

실수 비교를 참조하십시오.

나는 ... 즉. 그게 필요 할까? 그냥 한 적이 없어요.)

 
ALex2008 >> :

바로 이해가 안 되네요 ... 상황에 따라 스톱이 설정되지 않을 수 있습니다!

아마 그냥 다른 제거?? 논리가 통하지 않는듯...

그럴 수 있습니다. 아마도) 4h 캔들은 일반적으로 StopLevel보다 큽니다.


알렉스2008 >> :

나는 ... 즉. 그게 필요 할까? 그냥 한 적이 없어요.)

비교되는 양이 거의 같을 때 온갖 종류의 이해할 수 없음이 발생함)

같음을 위해 double 유형의 수를 확인할 때 - 필수입니다.


StopLoss - Ask < StopLevel - 0.5 * Point

영어로: StopLoss 빼기 Ask는 정확도가 0.5*Point인 StopLevel보다 작습니다.

(StopLoss,Ask,StopLevel -정규화)

 
StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
//StopLoss может присвоиться новое значение, желательно и его проверить на StopLevel
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
일반적으로 비뚤어진 것으로 판명되었습니다. 생각해야합니다)
 

그렇다면 이 옵션은? 남겨두는 것이 좋을 것 같습니다.

 if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
if ( StopLoss - Ask > StopLevel - 0.5 * Point ) StopLoss = MathMin ( s0 , s1 ) ;
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

그리고 거래 흐름도 확인해야 합니다. 그렇지 않으면 바쁘다는 오류도 쏟아지고 있습니다. TradeDispatcher: trade context is busy... 어드바이저 사본이 많으면 모두 신호에 , 기호의 현재 주문을 닫고 새 기호를 배치하십시오 ... 코르크가 형성됩니다)

이것은 아마도 가능합니다..

 //-------Поиск входа для установки ордеров, удаление старых ордеров и установка новых
void UpTrend ( ) {
     if ( ( iOpen ( NULL , PERIOD_H4 , 1 ) - iClose ( NULL , PERIOD_H4 , 1 ) < = 0 ) & &
        ( iOpen ( NULL , PERIOD_H4 , 2 ) - iClose ( NULL , PERIOD_H4 , 2 ) > 0 ) ) {
         Enter = iHigh ( NULL , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
         if ( IsTradeAllowed ( ) ) {
            DellAllOrders ( ) ;
            if ( Ask < Enter - StopLevel + 0.5 * Point ) {
               OrderSend ( Symbol ( ) , OP_BUYSTOP , 0.1 , Enter , 0 , 0 , Enter + Profit , 0 , 0 , 0 , Green ) ; }
         else Sleep ( 1000 ) ;
         }
      }
  }
void DownTrend ( ) {
     if ( ( iOpen ( NULL , PERIOD_H4 , 1 ) - iClose ( NULL , PERIOD_H4 , 1 ) > = 0 ) & &
        ( iOpen ( NULL , PERIOD_H4 , 2 ) - iClose ( NULL , PERIOD_H4 , 2 ) < 0 ) ) {
         Enter = iLow ( NULL , PERIOD_H4 , 1 ) - 10 * Point ;
         if ( IsTradeAllowed ( ) ) {
            DellAllOrders ( ) ;
            if ( Bid > Enter + StopLevel - 0.5 * Point ) {
               OrderSend ( Symbol ( ) , OP_SELLSTOP , 0.1 , Enter , 0 , 0 , Enter - Profit , 0 , 0 , 0 , Green ) ; }
         else Sleep ( 1000 ) ;
         }
      }
  }

저것들. 현재 주문을 종료하고 새로운 보류 주문을 하기 전에 거래 흐름을 확인합니다.일시 중지가 1초인 경우.

 
ALex2008 >> :

그렇다면 이 옵션은 어떨까요? 남겨두는 것이 좋을 것 같습니다.

 if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
if ( StopLoss - Ask > StopLevel - 0.5 * Point ) StopLoss = MathMin ( s0 , s1 ) ;
OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

아니오, 작동합니다. 결정하셔야 합니다.)

세 가지 옵션:

            StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
             if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
             if ( StopLoss - Ask > StopLevel - 0.5 * Point )
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

            StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
             if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = Ask + StopLevel ; //+x*Point
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

            StopLoss = MathMin ( s0 , s1 ) ; //Функция возвращает минимальное из двух числовых значений
             if ( StopLoss - Ask > StopLevel - 0.5 * Point )
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

ALex2008 작성 >>

그리고 거래 흐름도 확인해야 하고, 그렇지 않으면 바쁘다는 오류도 쏟아지고... 왜냐하면. 차트가 많으면 모두 동시에 현재 주문을 마감합니다...
 int start ( ) {
   if ( ! IsTradeAllowed ( ) ) return ( 0 ) ;

도움이 되지 않으면 모든 OrderSend,OrderModify,OrderClose,OrderDelete 전에 IsTradeContextBusy()를 확인하십시오.


알렉스2008 >> :
그러나 정확히 어디에 붙일지 생각하는 동안 맞도록 ... 그렇지 않으면 예를 들어 오래된 주문을 삭제하지 않기 때문입니다. 쓰레드가 바쁘긴 하지만 새로운 쓰레드를 설정해 놓을 텐데.. 조건에 따라 기존 주문이 모두 삭제되었을 때만 새 쓰레드를 넣으면 된다.

다시 쓰기가 더 쉽습니다. UpTrend() 및 DownTrend() 함수 검사 조건에서 주문이 제거되고 배치되며,

너무 많은 fsya 다른)

 
Swan >> :

아니오, 작동합니다. 결정하셔야 합니다.)

이해가 되지 않습니다. 작동할까요?

 
ALex2008 >> :

이해가 되지 않습니다. 작동할까요?

* 작동 안 할 것이다.

마지막 버전에서

         if ( Type = = 0 ) {
             if ( Bid - StopLoss < StopLevel - 0.5 * Point ) StopLoss = MathMin ( b0 , b1 ) ; 
             if ( Bid - StopLoss > StopLevel - 0.5 * Point ) StopLoss = MathMax ( b0 , b1 ) ;
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;

첫 번째 if() StopLoss는 정의되지 않았습니다.

 
Swan >> :

* 작동 안 할 것이다.

마지막 버전에서

첫 번째 if() StopLoss는 정의되지 않았습니다.


그래서 이것은 무엇입니까?

첫 번째 경우 중지는 2개의 양초 중 최소값(가격 기준)을 취합니다. 영장에서 멀리 떨어진

StopLoss=MathMin(b0,b1); 

두 번째 경우 스톱은 2개의 캔들 중 최대(가격 기준) 최저가를 취합니다. 주문에 가까운


StopLoss=MathMax(b0,b1);
 
ALex2008 >> :
         if ( Type = = 0 ) {
//здесь StopLoss нипанятно какой)
            if ( Bid - StopLoss < StopLevel - 0.5 * Point ) StopLoss = MathMin ( b0 , b1 ) ; 
             if ( Bid - StopLoss > StopLevel - 0.5 * Point ) StopLoss = MathMax ( b0 , b1 ) ;
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
 

//здесь StopLoss нипанятно какой)

정확히 무엇이 불분명합니까? 함수를 입력하면 0입니다. 제가 이해를 못 할 수도...


위의 조건이 있습니다 - 주문이 열려 있고 중지 = 0이면 중지합니다.

if ((Type<=1)&&(Stop==0))SetStop();

그리고 정지 설정 기능 자체


 //-------Вычисление стопа и установка
void SetStop ( ) {
      RefreshRates ( ) ;
      b0 = iLow ( NULL , PERIOD_H4 , 0 ) - 10 * Point ;
      b1 = iLow ( NULL , PERIOD_H4 , 1 ) - 10 * Point ;
      s0 = iHigh ( NULL , PERIOD_H4 , 0 ) + ( Ask - Bid ) + 10 * Point ;
      s1 = iHigh ( NULL , PERIOD_H4 , 1 ) + ( Ask - Bid ) + 10 * Point ;
            
         if ( Type = = 0 ) {
            if ( Bid - StopLoss < StopLevel - 0.5 * Point ) StopLoss = MathMin ( b0 , b1 ) ; 
            if ( Bid - StopLoss > StopLevel - 0.5 * Point ) StopLoss = MathMax ( b0 , b1 ) ;
            OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
         }
         if ( Type = = 1 ) {
            if ( StopLoss - Ask < StopLevel - 0.5 * Point ) StopLoss = MathMax ( s0 , s1 ) ;
            if ( StopLoss - Ask > StopLevel - 0.5 * Point ) StopLoss = MathMin ( s0 , s1 ) ;
            OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , StopLoss , OrderTakeProfit ( ) , 0 , Red ) ;
         }
   }
사유: