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

 
Forexman77 :
물론 필요합니다! 글쎄, 이 구성을 최소값 검색에 적용하는 방법은 무엇입니까? 내 머리로는 도저히 이해할 수 없다)

최대값을 검색하기 위해 변수 val에 값 0이 할당됩니다(지표 값보다 확실히 작음).

즉, 최소값을 찾기 위해서는 더 높은 값을 할당해야 합니다. EMPTY_VALUE 상수를 사용하거나 최소값 검색이 수행되는 일부 막대의 표시기 값을 직접 사용할 수 있습니다.

val= EMPTY_VALUE ;

for (i= 1 ;i<= 15 ;i++) {

    ind= iMA (...,i);

   if (ind < val) val=ind;

}

또는 다음과 같이:

val= MA (..., 1 );


for (i= 2 ;i<= 15 ;i++) {

    ind= iMA (...,i);

   if (ind < val) val=ind;

}
 
Forexman77 :

물론 필요합니다! 글쎄, 이 구성을 최소값 검색에 적용하는 방법은 무엇입니까? 내 머리로는 도저히 이해할 수 없다)
예, 배열을 선언하는 방법을 배우고 싶습니다. 다음과 같이 시도했습니다.

-1이 나옵니다.



루프는 34개의 값을 반복하고 배열에는 33개의 셀만 포함되어 있습니다. 수정하십시오.

그리고 여전히 ArrayMinimum (num_array, WHOLE_ARRAY ,0);

 
Forexman77 :

... 예, 배열을 선언하는 방법을 배우고 싶습니다 ...

교육용과 교육용으로만 사용한다면...

최소값과 최대값이 결정되는 기간 - 조정 및 최적화 가능성을 보장하기 위해 외부 매개변수여야 합니다.

 extern int p= 34 ; 

따라서 먼저 배열이 크기 없이 선언됩니다.

 double val[];

배열 선언은 함수가 아닌 일반 섹션에서 이루어집니다.

init 함수에서 배열의 크기가 설정됩니다.

 int init(){

   ArrayResize (val,p);

} 

이제 시작 함수에서 배열을 채웁니다.

 for ( int i= 0 ;i<p;i++) val[i]= iMA (...,i + 1 );

마지막으로 배열에 ArrayMaximum() 및 ArrayMinimum()을 적용 합니다.

 
Integer :

최대값을 검색하기 위해 변수 val에 값 0이 할당됩니다(지표 값보다 확실히 작음).

즉, 최소값을 찾기 위해서는 더 높은 값을 할당해야 합니다. EMPTY_VALUE 상수를 사용하거나 최소값 검색이 수행되는 일부 막대의 표시기 값을 직접 사용할 수 있습니다.

또는 다음과 같이:

정말 감사합니다!
 
evillive :

루프는 34개의 값을 반복하고 배열에는 33개의 셀만 포함되어 있습니다. 수정하십시오.

그리고 여전히 ArrayMinimum (num_array, WHOLE_ARRAY ,0);

정말 감사합니다!
 

친애하는 동료 프로그래머! 곤란합니다 도와주세요

나는 이미 이 코드에 대해 내 머리를 깨뜨렸다.

 //В условии прописано что работаем с 
if ( OrderType () == OP_BUY ){}
//, но метатрейдер почему то игнорирует это условие, и работает только с OP_SELLLIMIT

전체 기능은 다음과 같습니다.

 //+------------------------------------------------------------------+
//| Модифицируем стоплоссы                                           |
//+------------------------------------------------------------------+   
void modify_stoploss()
  {
   for ( int i= 0 ; i<= OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol ())
           {
             if ( OrderMagicNumber ()==magic)
              {
               if ( OrderType () == OP_BUY )
                 {
                   if (chek_way()== 1 )
                    {
                     double stoploss= NormalizeDouble (pre_openPrice( OP_BUY ), Digits );
                     Print ( "Стоплосс для Бай " , OrderTicket (), " = " , stoploss);
                     OrderModify ( OrderTicket (), OrderOpenPrice (),stoploss, OrderTakeProfit (), 0 ,CLR_NONE);
                    }
                 }
               if ( OrderType () == OP_SELL )
                 {
                   if (chek_way()== 0 )
                    {
                     stoploss= NormalizeDouble (pre_openPrice( OP_SELL ), Digits );
                     Print ( "Стоплосс для Cелл " , OrderTicket (), " = " , stoploss);
                     OrderModify ( OrderTicket (), OrderOpenPrice (),stoploss, OrderTakeProfit (), 0 ,CLR_NONE);
                    }
                 }
              }
           }
        }
     }
  }

그것은 인쇄에 오고 이것이 생산하는 것입니다:


반면 티켓: 225299700은 OP_SELLLIMIT 주문 티켓입니다.

그리고 예상대로 모든 것이 이 선택된 주문의 손절매를 수정합니다. 그리고 OP_BUY는 포인트 블랭크를 보지 않습니다. 물론 다음과 같습니다.

무엇이 문제가 될 수 있습니까? 그가 나에게 왜 이러는 거지? 내가 그것을 알아낼 수 있도록 도와주세요!

 
#property strict
#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
extern int pos= 1 ;
extern int sl= 40 ;
extern int tp= 70 ;
datetime time;
datetime time2;
bool trade= false ;
bool trade2= false ;
int a,b;
int OnInit ()
  {
//---
   MA.Create( Symbol (), PERIOD_CURRENT , 10 , 6 , MODE_EMA , PRICE_CLOSE ); //создал машку
//---
   return ( INIT_SUCCEEDED );
   
  }
void OnTick ()
  {
//---
   if (IsNewBar()== true ) //если новый бар включаемся
     {
     if (buy(pos)== true ) //если цена выше МА продолжаем
     {
       if (!ExistPositions( Symbol (),- 1 ,- 1 , 0 )) //если нету открых ордеров продолжаем
        {

         if (GetTypeLastClosePos( Symbol (),- 1 )!= OP_BUY ) //если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена 
//все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО 
//       ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
           {
            trade= true ;
           }
   if (trade== true )
        {
         OpenPosition( Symbol (), OP_BUY , 0.1 , Ask -sl* Point , Ask +tp* Point );
         trade= false ;
        }
}
        }
    
     
if (sell(pos)== true )
{
   if (!ExistPositions( Symbol (),- 1 ,- 1 , 0 ))
     {

       if (GetTypeLastClosePos( Symbol (),- 1 )!= OP_SELL )
        {
         trade2= true ;
        }

       if (trade2== true )
        {
         OpenPosition( Symbol (), OP_SELL , 0.1 , Bid +sl* Point , Bid -tp* Point );
         trade= false ;
      }
  }}
 }
  }

//возвращает истину если закрытие бара  с указаной позицией выше МА

bool buy( int pos)
  {
   if ( iClose ( Symbol (), 0 ,pos)>MA.Main( 1 ))
       return true ;
   else
       return false ;
  }
//+------------------------------------------------------------------+
//| возвращает истину если закрытие бара  с указаной позицией ниже МА
//+------------------------------------------------------------------+
bool sell( int pos)
  {
   if ( iClose ( Symbol (), 0 ,pos)<MA.Main( 1 ))
       return true ;
   else return false ;
  }
매매 조건 2가지를 제외한 모든 기능은 김씨 지점에서 가져옴....... 어디서 잘못했는지 알려주세요... 한 교차점에서 하나의 거래가 필요합니다
 

기능에 대한 또 다른 질문

/SetRectangle( clrBlue , "Прямоугольник" , Time [ 10 ], Low [ 10 ], Time [ 0 ], High [ 0 ]);
//Если bk=true, то будет залит цветом, если false - то просто "рамка" ... sz при "просто рамка" - это ширина линий "рамки"
//

//+----------------------------------------------------------------------------+
void SetRectangle( color cl, string nm= "" , datetime t1= 0 , double p1= 0 , datetime t2= 0 , double p2= 0 , int sz= 0 , bool bk= true ) {
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_RECTANGLE , 0 , 0 , 0 , 0 , 0 );
   ObjectSet (nm, OBJPROP_TIME1    ,t1);
   ObjectSet (nm, OBJPROP_PRICE1   ,p1);
   ObjectSet (nm, OBJPROP_TIME2    ,t2);
   ObjectSet (nm, OBJPROP_PRICE2   ,p2);
   ObjectSet (nm, OBJPROP_COLOR    ,cl);
   ObjectSet (nm, OBJPROP_WIDTH    ,sz);
   ObjectSet (nm, OBJPROP_BACK     ,bk);
}

예를 들어 지정된 가격으로 앞으로 5개의 막대를 앞으로 그리고 다시 그리지 않고 직사각형을 그리는 방법

 
artmedia70 :

나는 보았다. 고맙습니다.

그러나 질문에 대한 정보가 거의 없습니다. 한 달에 시간당 막대에 많은 극값이 있습니다. 그리고 그건 그렇고, 정확히 무엇의 극단입니까?


나는 두 개의 월별 극한값이 있다고 가정했습니다 - 최소값과 최대값 ... 글쎄, 신의 축복이 있기 때문에 처음에는 코드가 길어서 도움을 요청했지만 ... 그것이 나에게 깨달아 4에 맞습니다. 윤곽.
[삭제]  
말해 주세요. 600 이상의 빌드에서 브로커가 실제 볼륨을 발행할 수 있습니까?