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

 

안녕하세요,

다시 동기화하지 않고 VPS에서 어드바이저를 어떻게 관리할 수 있습니까?

내 말은: 터미널에서 차트에 버튼을 놓고 재초기화 없이 모드를 변경할 수 있습니다. 텔레그램 봇을 사용하여 vpse에서 어드바이저에게 명령을 내릴 수 있습니까?

아니면 재동기화 없이 EA 모드를 mql vps로 변경하는 다른 대안을 사용해야 합니까?


답변 해주셔서 감사합니다!

 

안녕하세요 전문가 여러분!

도와주세요, 문제를 해결해주세요.

모든 쌍을 테스트할 때 모든 것이 올바르게 작동하지만 다른 통화로 작업할 때 보류 중인 주문 이 배치되지 않고(임시 주문을 설정해야 함) 이익 실현이 트리거된 후 마감되지 않습니다.

가능하다면 코드를 변경하는 방법을 알려주십시오.

 bool operation= 0 ; for ( int pos= 0 ;pos< OrdersTotal ();pos++)
     { if ( OrderSelect (pos, SELECT_BY_POS) == false )   continue ;
       if ( OrderSymbol()== Symbol ()) break ;}


//=========================================================================================================
if (Hour()>= 2 &&Hour()<= 18 &&operation== 0 ){
if (OPB1== 1 )
   {operation= 1 ; if (operation== 0 &&OrderSymbol()!= Symbol ()|| OrdersTotal ()== 0 )
        { OrderSend ( Symbol (),OP_BUY,lots,Ask, 0 ,Bid-ss* Point ,Ask+T* Point , "My order#" ,mn, 0 ,Green);}}
         if (OrderType()==OP_BUY && OrdersTotal ()== 1 &&OrderMagicNumber()== 8 )
        { OrderSend ( Symbol (),OP_SELLSTOP, 5 *lots,OrderOpenPrice()-(ss-ss/ 4 )* Point , 0 , 0 ,SstopClose, "My order#" , 80 , 0 ,Red);}
       

if (OPS1== 1 )
   {operation= 1 ; if (operation== 0 &&OrderSymbol()!= Symbol ()|| OrdersTotal ()== 0 )        
         { OrderSend ( Symbol (),OP_SELL,lots,Bid, 0 ,Ask+ss* Point ,Bid-T* Point , "My order#" ,mn, 0 ,Red);}}
         if (OrderType()==OP_SELL && OrdersTotal ()== 1 &&OrderMagicNumber()== 8 )
         { OrderSend ( Symbol (),OP_BUYSTOP, 5 *lots,OrderOpenPrice()+(ss-ss/ 4 )* Point , 0 , 0 ,BstopClose, "My order#" , 80 , 0 ,Green);}}



if (OrderMagicNumber()== 80 ){operation= 0 ;
 { for ( int   ii= OrdersTotal ()- 1 ;ii>= 0 ;ii--)
       { OrderSelect (ii, SELECT_BY_POS);
         int   type   = OrderType(); bool result = false ;
         switch (type)
         { case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5 , Red ); //break;
           case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5 , Red ); //break;
         
          result = OrderDelete( OrderTicket() ); //break;
          }}}}
 

좋은 오후, 친애하는 포럼 사용자.

차트에 영역을 구축하는 지표를 구체화하는 데 도움이 됩니다.

기존 표시기에서 영역은 요일별로 설정됩니다.

요일별로 별도로 설정할 수 있어야 합니다.

 //+------------------------------------------------------------------+
//|                                            2 ЗОНЫ.mq4            |
//|                                                                  |
//|                                                                  |
//|                                                                  |
//|  2017                                                            |
//+------------------------------------------------------------------+

#property indicator_chart_window

//------- Внешние параметры индикатора -------------------------------
extern int     NumberOfDays = 150 ;         // Количество дней
extern string Begin_1      = "03:00" ;
extern string End_1        = "08:00" ;
extern color   Color_1      = PowderBlue;
extern string Begin_2      = "09:00" ;
extern string End_2        = "16:30" ;
extern color   Color_2      = Yellow;
extern bool    HighRange    = true ;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
   for ( int i= 0 ; i<NumberOfDays; i++) {
    CreateObjects( "PWT1" +i, Color_1);
    CreateObjects( "PWT2" +i, Color_2);
  }
   Comment ( "" );
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
   Comment ( "" );
}

//+------------------------------------------------------------------+
//| Создание объектов индикатора                                     |
//| Параметры:                                                       |
//|   no - наименование объекта                                      |
//|   cl - цвет объекта                                              |
//+------------------------------------------------------------------+
void CreateObjects( string no, color cl) {
   ObjectCreate (no, OBJ_RECTANGLE , 0 , 0 , 0 , 0 , 0 );
  ObjectSet(no, OBJPROP_STYLE , STYLE_SOLID );
  ObjectSet(no, OBJPROP_COLOR , cl);
  ObjectSet(no, OBJPROP_BACK , True);
}

//+------------------------------------------------------------------+
//| Удаление объектов индикатора                                     |
//+------------------------------------------------------------------+
void DeleteObjects() {
   for ( int i= 0 ; i<NumberOfDays; i++) {
     ObjectDelete ( "PWT1" +i);
     ObjectDelete ( "PWT2" +i);
  }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
   datetime dt=CurTime();

   for ( int i= 0 ; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1" +i, Begin_1, End_1);
    DrawObjects(dt, "PWT2" +i, Begin_2, End_2);
    dt=decDateTradeDay(dt);
     while (TimeDayOfWeek(dt)> 5 ) dt=decDateTradeDay(dt);
  }
}

//+------------------------------------------------------------------+
//| Прорисовка объектов на графике                                   |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//|   no - наименование объекта                                      |
//|   tb - время начала сессии                                       |
//|   te - время окончания сессии                                    |
//+------------------------------------------------------------------+
void DrawObjects( datetime dt, string no, string tb, string te) {
   datetime t1, t2, t3;
   double    p1, p2, p3;
   int       b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE )+ " " +tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE )+ " " +te);
  t3=StrToTime(TimeToStr(dt, TIME_DATE )+ " " "23:00" );
  b1= iBarShift ( NULL , 0 , t1);                             //Поиск бара по времени
  b2= iBarShift ( NULL , 0 , t2);
  p1=High[ iHighest ( NULL , PERIOD_M5 , MODE_HIGH , b1-b2, b2)];   // 
  p2=Low [ iLowest ( NULL , PERIOD_M5 , MODE_LOW , b1-b2, b2)]; // 
  p3=p2;
   if (!HighRange) {p1= 0 ; p2= 2 *p2;}
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
  ObjectSet(no, OBJPROP_TIME2 , t3);
  ObjectSet(no, OBJPROP_PRICE2, p3);
}

//+------------------------------------------------------------------+
//| Уменьшение даты на один торговый день                            |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//+------------------------------------------------------------------+
datetime decDateTradeDay ( datetime dt) {
   int ty=TimeYear(dt);
   int tm=TimeMonth(dt);
   int td=TimeDay(dt);
   int th=TimeHour(dt);
   int ti=TimeMinute(dt);

  td--;
   if (td== 0 ) {
    tm--;
     if (tm== 0 ) {
      ty--;
      tm= 12 ;
    }
     if (tm== 1 || tm== 3 || tm== 5 || tm== 7 || tm== 8 || tm== 10 || tm== 12 ) td= 31 ;
     if (tm== 2 ) if ( MathMod (ty, 4 )== 0 ) td= 29 ; else td= 28 ;
     if (tm== 4 || tm== 6 || tm== 9 || tm== 11 ) td= 30 ;
  }
   return (StrToTime(ty+ "." +tm+ "." +td+ " " +th+ ":" +ti));
}
//+------------------------------------------------------------------+

파일:
2_aqi4.ex4  17 kb
2_mne7.mq4  11 kb
 
Maxim Kuznetsov :

"if (OrdersTotal()==0)...." 조건을 제거합니다. - 그들은 단지 다음과 같이 말합니다: 우리는 주문이 전혀 없을 때만 항목을 찾고 새 주문을 엽니다.

그러한 조건이 없으면 많은 양의 새 팩이 즉시 열리지 않도록 추가 조건을 제시해야합니다. 그리고 이것은 이미 귀하의 전략에서 나온 것입니다. 이전 것에서 T 시간 동안 새 것을 열거나 막대를 제어하거나 주문 사이의 지점에서 거리를 유지하지 마십시오.

이해했습니다, 감사합니다)

 
전략 테스터 에서 분명히 볼 수 있듯이 MT5에서 실제 계정의 거래 결과를 그래프 형태로 표시하는 것이 가능합니까?
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 

남자들, 특히 개발자들은 그러한 문제를 해결할 기회가 있는지 말해 주시겠습니까? 사진 속 문제


 

좋은 오후입니다. 강조 표시된 위치의 변수 n에 "유형 변환으로 인한 데이터 손실 가능성 " 경고가 있습니다.

 // Переводим строку в верхний регистр
string StringUpper( string s) {
   int c, i, k= StringLen (s), n;
   for (i= 0 ; i<k; i++) {
    n= 0 ;
    c=StringGetChar(s, i);
     if (c> 96 && c< 123 ) n=c- 32 ;     // a-z -> A-Z
     if (c> 223 && c< 256 ) n=c- 32 ;   // а-я -> А-Я
     if (c== 184 ) n= 168 ;             //  ё  ->  Ё
     if (n> 0 ) s=StringSetChar(s, i, n );
  }
   return (s);
}

어떻게 고칠 수 있는지 알려주세요.

 
Sergey :

좋은 오후입니다. 강조 표시된 위치의 변수 n에 "유형 변환으로 인한 데이터 손실 가능성 " 경고가 있습니다.

어떻게 고칠 수 있는지 알려주세요.

또는 ushort n=0;

또는 StringSetChar(s, i, (ushort)n);

그러나 StringSetCharacter() 함수를 사용하는 것이 좋습니다.

Документация по MQL5: Строковые функции / StringSetCharacter
Документация по MQL5: Строковые функции / StringSetCharacter
  • www.mql5.com
Если значение pos меньше длины строки и значение символьного кода = 0, то строка усекается (но размер буфера, распределенного под строку остается неизменным). Длина строки становится равной значению pos.
 
이 사이트에 즐겨찾기에 기사를 추가하는 기능이 있습니까?
주제별 수행 방법.
 

안녕하세요.

다중 통화 Expert Advisor에서 오픈 포지션이 트리거될 때 카운터 이동에 대해 보류 중인 주문 을 마감해야 합니다.

이제 이익으로 마감할 때 모든 보류 중인 주문이 모든 통화로 마감됩니다.

통화 쌍에 연결된 보류 중인 주문만 마감되고 나머지는 배치된 상태로 유지되도록 코드를 변경하는 방법은 무엇입니까?

이 코드에서 무엇을 변경해야 합니까?:

 if (OrderMagicNumber()==Mn){operation= 0 ;
 { for ( int   i= OrdersTotal ()- 1 ;i>= 0 ;i--)
       { OrderSelect (i, SELECT_BY_POS);
         int   type   = OrderType(); bool result = false ;
         switch (type)
         { case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5 , Red ); //break;
           case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5 , Red ); //break; 
          
          result = OrderDelete( OrderTicket() ); //break;
          }}}}

이 코드의 Mn은 BUY_STOP 또는 SELL_STOP 보류 주문의 매직 넘버입니다.

이익을 취하여 오픈 포지션을 청산하면 이 마법으로 주문한 주문이 유지되고 이론상 삭제 명령이 실행되는 것과 같은 논리입니다.

이것은 각 쌍을 테스트할 때 작동합니다. 그러나 다른 통화로 작업하는 경우 모든 쌍에 대한 모든 주문이 삭제됩니다.

할 수 있는 사람을 도와주세요.

아무도이 문제를 귀찮게해서는 안된다는 것을 이해하지만 누군가가 기성품 템플릿을 가지고 있습니까?

나는 매우 감사하게 될 것입니다.