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

[삭제]  
Maxim Kuznetsov :

이 같은:

string level="Level"+IntegerToString(iTime(_Symbol,iBarShift(OrderCloseTime())); // ид.уровня - по времени бара (!! не по тикету)

if (ObjectFind(level)‌==-1) {

  // гор.вектора нет - видимо первый ордер из закрытых на баре

  // сделать горизонтальную линию‌

  ObjectCreate(0,level,OBJ_TREND,0,OrderCloseTime(),OrderClosePrice(),OrderCloseTime()+PeriodSeconds(_Period)*3,OrderClosePrice);

 // указывающую только вправо‌

  ObjectSetInteger(level,‌OBJPROP_RAY,1);

  ObjectSetInteger(level,OBJPROP_RAYLEFT,0);

‌ // украсить её как-то :-)

 ObjectSetInteger(level,OBJPROP_‌COLOR,....)

 ....‌

} else {

  // гор.уровень есть - значит были ордера закрытые на этом баре

  // по фантазии - обновить метки/корректировать уровень/etc‌

}‌

 int TotalPos=- 1 ;

void start()
 
{
 // остальной код

//--
   if ( OrdersTotal ()!=TotalPos) { // не мучаем каждый тик
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
     if ( OrderSymbol ()== Symbol () && OrderType ()<= 1 ) {
      History();

  
     }
  }}} TotalPos= OrdersTotal (); // запомним количество
//--
}
 
 
 
 void History() {
   string Ticket=( string ) OrderTicket ();
   color col=Red;
   if ( OrderType ()== 0 )col=Blue;
   datetime a= OrderOpenTime ();
   double b= OrderOpenPrice ();
   datetime c= OrderCloseTime ();
   double d= OrderClosePrice ();
   double prSep= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
   double prAll= 0 ;
   int     cn= 0 ;
   string hTicket;
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
     if ( OrderSymbol ()== Symbol () && OrderType ()<= 1 ) {
       datetime ct= OrderCloseTime ();
       // 60 секунд разницы между закрытием первой и последней в сетке
       if (c<=ct+ 60 && c>=ct- 60 ) {
        prAll+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
        hTicket=( string ) OrderTicket ();
        cn++;
      }
   }}}
   ObjectCreate (Ticket+ "Open" , OBJ_ARROW , 0 ,a,b);
   ObjectSet (Ticket+ "Open" , OBJPROP_COLOR ,col);
   ObjectSet (Ticket+ "Open" , OBJPROP_ARROWCODE , 1 );
     
   ObjectCreate (Ticket+ "Line" , OBJ_TREND , 0 ,a,b,c,d);
   ObjectSet (Ticket+ "Line" , OBJPROP_COLOR ,col);
   ObjectSet (Ticket+ "Line" , OBJPROP_WIDTH , 1 );
   ObjectSet (Ticket+ "Line" , OBJPROP_STYLE , STYLE_DOT );
   ObjectSet (Ticket+ "Line" , OBJPROP_RAY , 0 );
     
   ObjectCreate (Ticket+ "Close" , OBJ_ARROW , 0 ,c,d);
   ObjectSet (Ticket+ "Close" , OBJPROP_COLOR ,Green);
   ObjectSet (Ticket+ "Close" , OBJPROP_ARROWCODE , 3 );
 
   Ticket=cn> 1 ?hTicket:Ticket;
   ObjectCreate (Ticket+ "Profit" , OBJ_TEXT , 0 ,c,d);
   ObjectSet (Ticket+ "Profit" , OBJPROP_ANCHOR , 0 );
   ObjectSetText (Ticket+ "Profit" , DoubleToString (prAll, 2 ), 10 , "Arial" ,White);
   ObjectSet (Ticket+ "Profit" , OBJPROP_PRICE1 ,d);
   ObjectSet (Ticket+ "Profit" , OBJPROP_TIME1 ,c+ Period ()* 60 * 2 );
}

벡터를 레벨 조회로 사용하는 것은 옳지 않습니다.... 안 됩니다....((

기사의 행동을 취하면 어떻게 될까요?

수준을 검색할 때 이미 기록이 있는 가격 수준에서 이익을 합산하는 원칙을 사용합니다.

예: 여기에서 검색을 수행하고 60초 지연으로 이익을 합산했습니다.

 for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
     if ( OrderSymbol ()== Symbol () && OrderType ()<= 1 ) {
       datetime ct= OrderCloseTime ();
       // 60 секунд разницы между закрытием первой и последней в сетке
       if (c<=ct+ 60 && c>=ct- 60 ) {
        prAll+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
        hTicket=( string ) OrderTicket ();
        cn++;

다음으로 항목을 작성해야 합니다.

레벨에서 추가된 이익의 수가 1보다 크면 이것이 우리의 순서입니다 - 우리의 레벨, 우리는 그것에서 광선을 그립니다

 

인사말.

각 틱 에서 생성된 기존 주문을 순환하고 상황에 따라 행동하는 기능을 가진 고문이 계획되어 있습니다.

후속 주기에서 사용할 수 있도록 각각의 새 주문에 대해 별도의 변수 를 만드는 방법을 알려주실 수 있습니까? (Peremennaja+ticket=12345와 같은 것 같아요;)

 
Andrey Sokolov :

인사말.

각 틱 에서 생성된 기존 주문을 순환하고 상황에 따라 행동하는 기능을 가진 고문이 계획되어 있습니다.

후속 주기에서 사용할 수 있도록 각각의 새 주문에 대해 별도의 변수 를 만드는 방법을 알려주실 수 있습니까? (Peremennaja+ticket=12345와 같은 것 같아요;)

배열 또는 구조의 배열이 더 좋습니다.
 
Alexey Viktorov :
배열 또는 구조의 배열이 더 좋습니다.

죄송합니다. 더 구체적으로 말씀해 주시겠습니까?
 
Andrey Sokolov :

죄송합니다. 더 구체적으로 말씀해 주시겠습니까?


여기 그리고 여기 .

구조 및 구조 유형의 배열이 생성됩니다. 모든 코드 너머.

 struct trade_settings
  {
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
   uchar   slippage;     // значение допустимого проскальзывания
  };
//--- создали массив типа trade_settings
trade_settings my_set[];
 // присвоить значение нулевому индексу массива в основном коде
my_set[ 0 ].take = что_то;
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
 

안녕하세요.

수평선 " ResisL " 과 " TrndL " 각도를 따른 추세선 의 교차점을 찾도록 도와주세요.

TRA
 
Nikolay Fedyay :

안녕하세요.

수평선 " ResisL " 과 " TrndL " 각도를 따른 추세선 의 교차점을 찾도록 도와주세요.

 //+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect( double left_bar, double left_price, double right_bar, double right_price, double bar_to_search) {
   return ((right_bar==left_bar)?left_price:(right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
}
//+------------------------------------------------------------------+
경사진 좌표의 두 점을 알고 이 함수의 매개변수로 삽입하면 출구에서 bar_to_search 막대의 한 점 가격을 얻을 수 있습니다. 남은 것은 막대 주기에서 이 함수를 호출하고 반환된 값을 수평선의 가격과 비교하는 것입니다. 사이클의 마지막 막대에서 함수에 의해 반환된 값이 수평선의 가격 값보다 작거나 같고 사이클의 현재 막대에서 함수에 의해 반환된 값이 의 가격보다 큰 경우 선, 교차점의 X 좌표는 주기 인덱스에 해당하는 시간이 되고 Y의 경우 함수에서 반환된 가격이 됩니다.
 
Artyom Trishkin :

고맙습니다.

그리고 막대가 여전히 누락된 교차점, 즉 미래의 날짜를 찾아야 하는 경우 수행하는 방법.

 
Nikolay Fedyay :

고맙습니다.

그리고 막대가 여전히 누락된 교차점, 즉 미래의 날짜를 찾아야 하는 경우 수행하는 방법.

나는 이 기능을 시도하지 않았습니다 - 당신은 실험해야 합니다.

 
Artyom Trishkin :

나는 이 기능을 시도하지 않았습니다 - 당신은 실험해야 합니다.

실험할 시간이 있으시면 결과를 공유해 주십시오.

무엇을 실험 할지 모르기 때문에
.