MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1584

 
Valeriy Yastremskiy :

차이 모듈. 모듈이 없으면 상위 영역만 조건에 해당합니다. | OpenPrice - 입찰 |> 10*_포인트 오픈 조건

따라서 조건에 따라 필요합니다. 입찰가가 OpenPrice보다 낮고 모듈이 없습니다.

그렇지 않으면 입찰가가 OpenPrice 보다 높으면 올바른 결과를 얻게 됩니다.

 
Valeriy Yastremskiy :

차이 모듈. 모듈이 없으면 상위 영역만 조건에 해당합니다. | OpenPrice - 입찰 |> 10*_포인트 오픈 조건

도무지 이해가 되지 않았다...

초보자를 위해 더 쉽게 접근할 수 있게 해주세요...)

 
MakarFX :

놀랐 잖아


어떻게?
 
Alexey Viktorov :
어떻게?
알렉세이 빅토로프 :

OpenPrice - Bid가 10*_Point를 넘지 않아야 함을 그림에서 알 수 있습니다.

그러나 부정적인 것을 포함하여 더 적을 수 있습니다.

 
MakarFX :

그러나 부정적인 것을 포함하여 더 적을 수 있습니다.

네... 그리고 "&& > 0"으로 조건이 나옵니다.

그리고 질문은 무엇입니까? 그냥 그렇게, 아니면 뭔가를 위해?

 
Alexey Viktorov :

네... 그리고 "&& > 0"으로 조건이 나옵니다.

그리고 질문은 무엇입니까? 그냥 그렇게, 아니면 뭔가를 위해?

나는 이제 시장 진입 순간에 대한 이 정의를 사용합니다.

 if (Bid < OpenPrice && Bid > OpenPrice-Х* Point )
if (Ask > OpenPrice && Ask < OpenPrice+Х* Point )

단순화할 수 있다고 생각함

 

마틴을 담당하는 코드를 최적화하는 데 도움

작업은 다음과 같습니다.

- 정지 후 Martin은 제비를 곱합니다.

- 곱셈 수는 OrdersClose 기능으로 조정할 수 있습니다. 지정된 값에 도달하면 로트 크기가 시작 크기로 재설정됩니다.

- 로트 크기가 처음으로 재설정되지 않고 역순으로 순차적으로 감소해야 합니다.

예: OrdersClose=5, Martin=2, lot=0.01:

우리는 시퀀스를 가지고 있습니다: 0.01; 0.02; 0.04; 0.08; 0.16(리셋) 0.01; 0.01;,,,,

필요: 0.01; 0.02; 0.04; 0.08; 0.16(리셋) 0.16; 0.08; 0.04; .... 0.01.

스스로 문제를 해결할 지식이 없습니다.

다양한 조합을 시도했지만 원하는 효과를 얻지 못했습니다.

 double LOT()
{
   int n= 0 ;
   double OL=dLots;
   for ( int j = OrdersHistoryTotal()- 1 ; j >= 0 ; j--)
   {
       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMagic)
         {
             if (OrderProfit()< 0 ) 
            {
               if (n== 0 ) OL= NormalizeDouble (OrderLots()*K_Martin,DigitsLot);
               n++;
               if (n>=OrdersClose) { Comment ( "1" ); return (dLots);}
            }
             else
            {
               if (n== 0 ) { Comment ( "2" ); return (dLots);}
               else { Comment ( "3" ); return (OL);}
            }
         }
      }
   }
   return (OL);
}
 
MakarFX :

나는 이제 시장 진입 순간에 대한 이 정의를 사용합니다.

단순화할 수 있다고 생각함

 if (Bid < OpenPrice && Bid > OpenPrice-Х* Point )
if (Ask > OpenPrice && Ask < OpenPrice+Х* Point ) // цену в середину диапазона ставим

OpenPriceS=OpenPrice-X* Point / 2 ;
if(fabs(Bid-OpenPriceS)>Х* Point ){ ....   }

그리고 알렉세이가 맞습니다.

알렉세이 빅토로프 :

따라서 조건에 따라 필요합니다. 입찰가가 OpenPrice보다 낮고 모듈이 없습니다.

그렇지 않으면 입찰가가 OpenPrice 보다 높으면 올바른 결과를 얻게 됩니다.

수정됨)

네, 맞습니다. 조건은 변경되지 않았습니다. 습관적으로. 그림에서 그것은 중간에 그 Bid를 무너 뜨립니다)))

그러나 두 번째 조건이 있습니다. 기록은 조건의 수면에서 동일합니다.

 
законопослушный гражданин :

마틴을 담당하는 코드를 최적화하는 데 도움

작업은 다음과 같습니다.

- 정지 후 Martin은 제비를 곱합니다.

- 곱셈 수는 OrdersClose 기능으로 조정할 수 있습니다. 지정된 값에 도달하면 로트 크기가 시작 크기로 재설정됩니다.

- 로트 크기가 처음으로 재설정되지 않고 역순으로 순차적으로 감소해야 합니다.

예: OrdersClose=5, Martin=2, lot=0.01:

우리는 시퀀스를 가지고 있습니다: 0.01; 0.02; 0.04; 0.08; 0.16(리셋) 0.01; 0.01;,,,,

필요: 0.01; 0.02; 0.04; 0.08; 0.16(리셋) 0.16; 0.08; 0.04; .... 0.01.

스스로 문제를 해결할 지식이 없습니다.

다양한 조합을 시도했지만 원하는 효과를 얻지 못했습니다.

 //+------------------------------------------------------------------+
//| Расчет лота                                                      |
//+------------------------------------------------------------------+
double Lots()
  {
   double L= 0 ;
   // если последняя закрытая сделка убыточная и лот равен стартовому
   // включаем Мартин
   if (GetInfoLastPos( 2 )< 0 &&GetInfoLastPos( 1 )==Lot) 
     {
      Martin= true ;
     }
   // если последняя закрытая сделка убыточная и лот больше или равен максимальному
   // выключаем Мартин
   if (GetInfoLastPos( 2 )< 0 &&GetInfoLastPos( 1 )>=MaxMartinLot)
     {
      Martin= false ;
     }
   // если последняя закрытая сделка убыточная и Мартин включен, умножаем лот
   if (Martin== true )
     {
      L= NormalizeDouble (GetInfoLastPos( 1 )*K_Martin,DigitsLot);
     }
   // если последняя закрытая сделка убыточная и Мартин выключен, делим лот
   if (Martin== false )
     {
      L= NormalizeDouble (GetInfoLastPos( 1 )/K_Martin,DigitsLot);
     }

   if (L>MAXLOT) L = MAXLOT;
   if (L<MINLOT) L = MINLOT;
   return (L);
  }
//+----------------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                                    |
//|  1 - размер лота последней закрытой позиции                                |
//|  2 - размер профита с учетом комиссии и свопа последней закрытой позиции   |
//|  3 - время последней закрытой позиции                                      |
//+----------------------------------------------------------------------------+
double GetInfoLastPos( int a= 1 )
  {
   datetime t= 0 ;
   double result= 0 ,l= 0 ,p= 0 ,f= 0 ;
   int i=OrdersHistoryTotal();
   for ( int pos= 0 ; pos<i; pos++)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic)
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if (t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();}
              }
           }
        }
     }
   if (a== 1 ) {result=l;} else
   if (a== 2 ) {result=p;} else
   if (a== 3 ) {result=( double )t;}
   else      {result= 0 ;}
   return (result);
  }
 
Valeriy Yastremskiy :

그리고 알렉세이가 맞습니다.

네, 맞습니다. 조건은 변경되지 않았습니다. 습관적으로. 그림에서 그것은 중간에 그 Bid를 무너 뜨립니다)))

감사합니다, 하지만 이것은 어떤 식으로든 내 코드를 단순화하지 않습니다)