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

 
Vitaly Muzichenko :
가격을 즉시 대체합니까, 아니면 가격을 가져와 계산에 대체합니까?
비탈리 무지첸코 :
가격을 즉시 대체합니까, 아니면 가격을 가져와 계산에 대체합니까?
정수 k=마침표;
for(int i=1; i<=마침표; i++)
{
H1_닫기[i]=닫기[k];
케이--;
}
나는 마지막으로 닫힌 막대에서 시작하는 기간과 동일한 시간 세션의 조각을 가져와 어레이에 미러링되도록 뒤집습니다. thaysession 1에서 끝에서 두 번째 막대이고 내가 이해한 대로 계산은 i번째부터 시작해야 합니다.
저것들. 내 함수는 마지막으로 닫힌 막대의 SMMA 값을 반환해야 합니다.
 
좋은 하루 되세요.
아래 코드는 간단한 아이디어를 인코딩합니다.
마지막으로 마감된 주문이 SELL인 경우
마지막 마감 주문이 SL에서 마감된 경우
SEL 주문 열기
if ( OrderSelect (Ht- 1 , SELECT_BY_POS , MODE_HISTORY ))                                            
if ( OrderType ()== OP_SELL )                                            
X = OrderProfit ( );                                            

if ( OrderSelect (Ht- 1 , SELECT_BY_POS , MODE_HISTORY ))                                            
if ( OrderType ()== OP_BUY )                                              
if (X < 0 )                                              

OrderSend ( Symbol (), OP_SELL , 0.1 , Bid , 3 , Ask + 400 * Point , Ask - 200 * Point , "17-10" , 123 );



문제
이 코드에 두 가지 새로운 조건 을 추가하는 데 사용할 수 있는 언어 구성(빨간색으로 강조 표시됨)

마지막으로 마감된 주문이 SELL인 경우
끝에서 두 번째 주문이 SELL인 경우
마지막 마감 주문이 SL에서 마감된 경우
PRE-마지막 마감 주문이 CL에 의해 마감된 경우

도와 주셔서 감사합니다.


코드를 작성하고 수행해야 할 작업을 말로 설명하지 않으면 매우 감사하겠습니다.
 
안녕하세요. 보류 중인 모든 주문 을 제거하는 스크립트를 작성 중입니다. 그러나 하나의 주문만 삭제합니다. 나는 항상 두 가지 또는 하나의 보류 중인 주문이 있습니다. 어떤 경우든 Buy Stop만 제거합니다. Sell Stop을 제거하려면 다른 Buy Stop 주문이 없는 경우 스크립트를 다시 실행해야 합니다. 어디가 잘못되었는지 알려주세요.

무효 DeleteOrders()
{
정수 합계=주문 합계();
for(int i=0;i<총계;i++)
if(주문선택(i,SELECT_BY_POS))
{
정수 유형=주문 유형(), 티켓=주문 티켓();
부울 c;
스위치(유형)
{
사례 4:
c=OrderDelete(티켓);
만약(!c)
인쇄(GetLastError());
부서지다;
사례 5:
c=OrderDelete(티켓);
만약(!c)
인쇄(GetLastError());
부서지다;
}
}
}
 
0B53RV3R :
안녕하세요. 보류 중인 모든 주문 을 제거하는 스크립트를 작성 중입니다. 그러나 하나의 주문만 삭제합니다. 나는 항상 두 가지 또는 하나의 보류 중인 주문이 있습니다. 어떤 경우든 Buy Stop만 제거합니다. Sell Stop을 제거하려면 다른 Buy Stop 주문이 없는 경우 스크립트를 다시 실행해야 합니다. 어디가 잘못되었는지 알려주세요.

무효 DeleteOrders()
{
정수 합계=주문 합계();
for(int i=0;i<총계;i++)
if(주문선택(i,SELECT_BY_POS))
{
정수 유형=주문 유형(), 티켓=주문 티켓();
부울 c;
스위치(유형)
{
사례 4:
c=OrderDelete(티켓);
만약(!c)
인쇄(GetLastError());
부서지다;
사례 5:
c=OrderDelete(티켓);
만약(!c)
인쇄(GetLastError());
부서지다;
}
}
}
(i=total-1;i>=0;i--)에 대한 반복 방향 변경
 
Maxim Kuznetsov :
(i=total-1;i>=0;i--)에 대한 반복 방향 변경
감사합니다. 이제 작동합니다. 인덱스가 0인 주문을 삭제할 때 인덱스가 1인 주문에 인덱스 0이 할당되고 다음 반복에서 i == 1이라는 것을 올바르게 이해하지만 그러한 주문은 없습니다. 말해봐, 응?
 
0B53RV3R :
감사합니다. 이제 작동합니다. 인덱스가 0인 주문을 삭제할 때 인덱스가 1인 주문에 인덱스 0이 할당되고 다음 반복에서 i == 1이라는 것을 올바르게 이해하지만 그러한 주문은 없습니다. 말해봐, 응?
그래서.
 

사용자 정의 가능한 프랙탈 기능이 있습니다. 음, 젠장, 일부는 매우 무겁습니다. 나는 도형 형성의 정확성을 시각적으로 표시하기 위해서만 물체의 그림을 남겼습니다.

질문: 시각적 테스트를 어떻게 용이하게 할 수 있습니까? 그렇지 않으면 무디게 됩니다.

extern int FrLeft= 15 ; // Баров слева
extern int FrRight= 5 ; // Баров справа

//-----------------------------------------------------------------------------------------------
void OnTick ()
{
int nFrUp= GetBarFractal( Symbol (), PERIOD_CURRENT ,FrLeft,FrRight, 0 , MODE_UPPER ); // Возвращает номер бара
int nFrDn= GetBarFractal( Symbol (), PERIOD_CURRENT ,FrLeft,FrRight, 0 , MODE_LOWER ); // Возвращает номер бара
double FrHigh = High [nFrUp]; // Цена верхнего фрактала
double FrLow  = Low [nFrDn]; // Цена нижнего фрактала

SetArrow( "FrUp" + "_" +( string ) Time [nFrUp], Time [nFrUp], High [nFrUp], clrDeepSkyBlue , 217 , 2 , ANCHOR_BOTTOM );
SetArrow( "FrDn" + "_" +( string ) Time [nFrDn], Time [nFrDn], Low [nFrDn], clrDeepPink , 218 , 2 , ANCHOR_TOP );

// Comment("Price: ",FrHigh,", Num: ",nFrUp,"\nPrice: ",FrLow,", Num: ",nFrDn);
}

//----------------------------------------------------------------------------------------------+
//---------------------- Возвращает номер бара фрактала (настраиваемый) ------------------------+
//----------------------------------------------------------------------------------------------+
int GetBarFractal( string symb, ENUM_TIMEFRAMES tf= 0 , int nLeft= 2 , int nRight= 2 , int numFr= 0 , int mode= MODE_UPPER ) {
int i= 0 ,cn= 0 ,pos= 0 ,r= 0 ,l= 0 ,e= 0 ,equals,bars;
double _high[], _low[];
nLeft=nLeft<= 2 ? 2 :nLeft;
nRight=nRight<= 2 ? 2 :nRight;
equals=nLeft+nRight;
bars= Bars (symb,tf)-equals;
ArraySetAsSeries (_high, true );
ArraySetAsSeries (_low, true );

   for (pos=nRight+ 1 ; pos<bars; pos++) {
   r=nRight;
   if (mode== MODE_UPPER ) {
     CopyHigh (symb,tf, 0 ,pos+equals+ 1 ,_high);
     for (i= 1 ; i<=r; i++) {
     if (_high[pos]<=_high[pos-i]) break ;
   }}
   if (mode== MODE_LOWER ) {
     CopyLow (symb,tf, 0 ,pos+equals+ 1 ,_low);
     for (i= 1 ; i<=r; i++) {
     if (_low[pos]>=_low[pos-i]) break ;
   }}
   //--
   if (i==r+ 1 ) {
    l=nLeft;
    e=equals;
     for ( int j= 1 ; j<=l+equals; j++) {
       if (mode== MODE_UPPER ) {
       if (_high[pos]<_high[pos+j])   break ;
       if (_high[pos]>_high[pos+j])  l--;
       if (_high[pos]==_high[pos+j]) e--;
      }
       if (mode== MODE_LOWER ) {
       if (_low[pos]>_low[pos+j])   break ;
       if (_low[pos]<_low[pos+j])  l--;
       if (_low[pos]==_low[pos+j]) e--;
      }
       if (l== 0 ) {
       cn++;
       if (cn>numFr) return (pos);
      }
       //--
       if (e< 0 ) break ;
   }}
  }
   Print ( __FUNCTION__ ": Фрактал не найден" );
   return ( 0 );
}

//----------------------------------------------------------------------------------------------+
//------------------- Функция рисования значка на графике, объект OBJ_ARROW --------------------+
//----------------------------------------------------------------------------------------------+
void SetArrow( string nm= "" , datetime t1= 0 , double p1= 0 , color col= clrRed ,
                                            int code= 252 , int width= 1 , int anchor= 0 ) {
if ( ObjectFind ( 0 ,nm)==- 1 ) {
     ObjectCreate ( 0 ,nm, OBJ_ARROW , 0 , 0 , 0 );
     ObjectSetInteger ( 0 ,nm, OBJPROP_COLOR ,col);
     ObjectSetInteger ( 0 ,nm, OBJPROP_ARROWCODE ,code);
     ObjectSetInteger ( 0 ,nm, OBJPROP_ANCHOR ,anchor);
     ObjectSetInteger ( 0 ,nm, OBJPROP_WIDTH ,width);
     ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTED , false );
     ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTABLE , true );
     ObjectSetInteger ( 0 ,nm, OBJPROP_HIDDEN , false );
     ObjectSetDouble ( 0 ,nm, OBJPROP_PRICE ,p1);
     ObjectSetInteger ( 0 ,nm, OBJPROP_TIME ,t1);
   }
}

고맙습니다!

 
Vitaly Muzichenko :

사용자 정의 가능한 프랙탈 기능이 있습니다. 음, 젠장, 일부는 매우 무겁습니다. 나는 도형 형성의 정확성을 시각적으로 표시하기 위해서만 물체의 그림을 남겼습니다.

질문: 시각적 테스트를 어떻게 용이하게 할 수 있습니까? 그렇지 않으면 무디게 됩니다.

고맙습니다!

모든 것을 지표로 변환해야만 쉽게 만들 수 있습니다. 테스트는 차트의 왼쪽 상단 모서리에 있는 주석, 특히 테스터가 직접 설정한 시작 및 닫는 위치 표시를 느리게 합니다.
 

안녕하세요. 초보자에게 말하지 마십시오.

다음은 예입니다.

if(조건1)

if(조건2)

{

}

또 다른

{

}

프로그램에 따르면 Else는 if(condition1)을 참조해야 하며 Condition1이 충족되지 않으면 실행됩니다.

그리고 실제로는 조건 2가 충족되지 않으면 실행된다.‌

 
Andy-D :

안녕하세요. 초보자에게 말하지 마십시오.

다음은 예입니다.

if(조건1)

if(조건2)

{

}

또 다른

{

}

프로그램에 따르면 Else는 if(condition1)을 참조해야 하며 Condition1이 충족되지 않으면 실행됩니다.

그리고 실제로는 조건 2가 충족되지 않으면 실행된다.‌


조건과 함께 즉시 중괄호를 넣는 습관을 들이십시오.

if(조건)

{

}

귀하의 질문에 A‌

if (Условие 1 )
   {
       if (Условие 2 )

        {

        }
    }
   else

    {

    }