[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 497

 
새로운 바 에서 한 번만 주문을 여는 방법을 알려주십시오 ????
 

어드바이저에서 코드를 구현합니다. 삭제할 때까지 이와 같은 코드가 있었습니다. 시간 단위를 사용했습니다.

orderselect - 기록의 마지막 주문 선택

닫는 시간을 가져 정확히 닫는 시간을 빼내십시오.

주문을 열기 전에 현재 시간이 히스토리에서 주문을 마감한 시간과 같지 않다는 조건을 설정합니다.

 

문제를 도와주세요. 두 번째 가격 업데이트 후에 내 TP 변수가 재설정 됩니다. 즉, 고문이 주문을 열고 TP와 입찰가의 값을 제공합니다. 둘 다 0이 아닌 경우 가격이 다시 업데이트됩니다. TP가 0이 되지만 코드에 그런 명령어는 없지만 SL을 올리는데 문제가 있었는데 이제 TP를 결정하는데 문제가 있음이 밝혀졌다

정수 시작()
{
//----
이중 TP;
더블 SL;
if (OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,Bid+4*Point);
주문선택(주문총계()-1,SELECT_BY_POS);
TP=OrderTakeProfit();
}
경고("TP="+TP);
Alert("입찰가=" + 입찰가);
if (OrdersTotal()>0)
{
if (TP-입찰가<3*포인트)
{
경보("TP에 1 또는 2로 접근함");
경고("TP="+TP);
Alert("입찰가=" + 입찰가);
}
}
//----
리턴(0);
}

 
LazarevDenis :

문제를 도와주세요. 두 번째 가격 업데이트 후에 내 TP 변수가 재설정됩니다. 즉, 고문이 주문을 열고 TP와 입찰가의 값을 제공합니다. 둘 다 0이 아닌 경우 가격이 다시 업데이트됩니다. TP가 0이 되지만 코드에 그런 명령어는 없지만 SL을 올리는데 문제가 있었는데 이제 TP를 결정하는데 문제가 있음이 밝혀졌다

double TP, SL;


int start()
{
//----

if (OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,Bid+4*Point);
OrderSelect(OrdersTotal()-1,SELECT_BY_POS);
TP=OrderTakeProfit();
}
Alert ("TP=" + TP);
Alert ("Bid=" + Bid);
if (OrdersTotal()>0)
{
if (TP-Bid<3*Point)
{
Alert ("Приблизился к ТП на 1 или 2");
Alert ("TP=" + TP);
Alert ("Bid=" + Bid);
}
}
//----
return(0);
}
이렇게 해보세요..
 
VOLDEMAR :
새로운 바에서 한 번만 주문을 여는 방법을 알려주십시오 ????

여기 읽기: https://www.mql5.com/en/forum/134437
 
Cmu4 정말 감사합니다 많은 도움이 되었습니다
 

안녕하세요!

이 전략은 주 신호와 보조 신호의 두 가지 존재를 제공합니다. 12시간 이내에 두 번째 신호가 나타나면 거래가 시작됩니다. 질문: 어드바이저에게 신호가 12시간 후에 나타날 경우 신호에 반응하지 않도록 가르치는 방법은 무엇입니까? 가능하다면 구체적인 코드 예시를 부탁드립니다.

 
demlin :

안녕하세요!

이 전략은 주 신호와 보조 신호의 두 가지 존재를 제공합니다. 12시간 이내에 두 번째 신호가 나타나면 거래가 시작됩니다. 질문: 어드바이저에게 신호가 12시간 후에 나타날 경우 신호에 반응하지 않도록 가르치는 방법은 무엇입니까? 가능하다면 구체적인 코드 예시를 부탁드립니다.


안녕하세요 드미트리입니다. 저는 다음 옵션을 제공할 준비가 되어 있습니다. 비유를 위해 기사의 거래 기준 트리거를 참조하십시오. 두 신호에 대한 주문 트리거도 있습니다. 즉, 두 번째 그림 이후를 참조하십시오. "DeMarker 차트에서 가장 먼저 기다려야 하는 것은 DeMarker가 0.7 영역에서 빠르고 느린 MA 라인을 숏 포지션으로 교차합니다.이것은 첫 번째 예비 신호입니다.다음으로 실제 MA 라인 자체의 교차점을 기다립니다.이 신호가 주요 신호이며 그 후에 가져갈 수 있습니다. Taichi 표시기의 판독 값으로. MA 선의 교차가 발생하지 않으면 신호가 잘못된 것으로 간주되며 가격 움직임의 발전은 계속됩니다." 다음은 거래 기준 트리거를 담당하는 올빼미에 포함된 코드 형식으로 수행한 방법입니다.

주요 기능은 하나 또는 다른 거래 기준이 트리거될 때 플래그를 설정하고 지우는 방식으로 아래(마지막에) 두 가지 포함 기능을 통해 작업한다는 것입니다.

 //--------------------------------------------------------------------
// Criterion.mqh
// 
//--------------------------------------------------------------- 1 --
// Функция вычисления торговых критериев.
// Возвращаемые значения:
// 10 - открытие Buy  
// 20 - открытие Sell 
// 0  - значимых критериев нет
// 
//--------------------------------------------------------------- 2 --
// Внешние переменные:
extern string A5 = "Параметры" ;
//extern int       Period_K = 5;            // Период K
//extern int       Period_D = 3;            // Период D
//extern int       Slowing = 3;             // Замедление

extern int Tenkan= 9 ;
extern int Kijun= 26 ;
extern int Senkou= 52 ;
extern int FlatSE= 7 ;

extern int DeMarker=25;
extern int FastMA=14;
extern int SlowMA=25;
extern double DeMarker_OpenLevel_Sell = 0.7;
extern double DeMarker_OpenLevel_Buy = 0.7;
bool   DeMarker_Buy_signal=false, DeMarker_Sell_signal=false,
       MA_Buy_signal=false, MA_Sell_signal=false;



extern int t_trend_period =6; // для оптимизации по всем периодам от 0 до 7 шаг 1
                              // на каком ТФ работаем: 1-М1, 2-М5, 3-М15, 4-М30, 5-Н1, 6 - Н4, 7-день
 

//--------------------------------------------------------------- 3 --
int Criterion()                         // Пользовательская функция
  {
  //--------------------------------------------------------------- 4 --
int trend_period=GetPeriod(t_trend_period); // для выбора оптимального значения рабочего ТФ

   // Параметры технич. индикат:
                 
double Taichi_1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" ,Tenkan, Kijun, Senkou, FlatSE, 0 , 1 );
double TaichiFor_1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 3 , 1 );
double Signal_1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 1 , 1 );
double SSignal_1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 2 , 1 );

double FlatBuffer1 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 4 , 1 );
double FlatBuffer2 = iCustom ( Symbol (), trend_period, "Cronex Taichi" , Tenkan, Kijun, Senkou, FlatSE, 5 , 1 );

double DeMarker_1 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" ,DeMarker, FastMA, SlowMA, 0 , 1 );
double DeMarker_2 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" ,DeMarker, FastMA, SlowMA, 0 , 2 );

double FastMA_1 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" , DeMarker, FastMA, SlowMA, 1 , 1 );
double FastMA_2 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" , DeMarker, FastMA, SlowMA, 1 , 2 );

double SlowMA_1 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" , DeMarker, FastMA, SlowMA, 2 , 1 );
double SlowMA_2 = iCustom ( Symbol (), trend_period, "Cronex DeMarker" , DeMarker, FastMA, SlowMA, 2 , 2 );

//--------------------------------------------------------------- 5 --
   // Вычисление торговых критериев
   
   if (( (type_op_DeMarker(DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (DeMarker_Buy_signal == true && DeMarker_Sell_signal==false)) &&   // когда DeMarker пересекает медленую (выше уровня бай (0.7)) для лонг
      ( (type_op_MA (DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (MA_Buy_signal==true && MA_Sell_signal==false)) && // пересечение МА DeMarkers
   
   
      (iClose( Symbol (), trend_period, 1 ) > Taichi_1 && Taichi_1 > TaichiFor_1 && Signal_1 > SSignal_1 && FlatBuffer1== 0 && FlatBuffer2== 0 ))
     
         {
           Print ( "Taichi_1 = " , Taichi_1, "TaichiFor_1 = " ,TaichiFor_1, "Signal_1 = " , Signal_1, "SSignal_1 = " ,SSignal_1, "FlatBuffer1 = " , FlatBuffer1, "FlatBuffer2 = " , FlatBuffer2);
           Print ( "DeMarker_1 = " , DeMarker_1, "DeMarker_2 = " ,DeMarker_2, "FastMA_1 = " , FastMA_1, "FastMA_2 = " ,FastMA_2, "SlowMA_1 = " , SlowMA_1, "SlowMA_2 = " , SlowMA_2);
           return ( 10 );                       // Открытие Buy    
         }
        
   if (( (type_op_DeMarker(DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_SELL) || (DeMarker_Buy_signal==false && DeMarker_Sell_signal==true)) &&   // когда DeMarker пересекает медленую (ниже уровня селл) для шорт
      ( (type_op_MA (DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_SELL) || (MA_Buy_signal==false && MA_Sell_signal==true)) && // пересечение МА DeMarkers
        
      (iClose( Symbol (), trend_period, 1 ) < Taichi_1 && Taichi_1 < TaichiFor_1 && Signal_1 < SSignal_1 && FlatBuffer1== 0 && FlatBuffer2== 0 ))
        {
           Print ( "Taichi_1 = " , Taichi_1, "TaichiFor_1 = " ,TaichiFor_1, "Signal_1 = " , Signal_1, "SSignal_1 = " ,SSignal_1, "FlatBuffer1 = " , FlatBuffer1, "FlatBuffer2 = " , FlatBuffer2);
           Print ( "DeMarker_1 = " , DeMarker_1, "DeMarker_2 = " ,DeMarker_2, "FastMA_1 = " , FastMA_1, "FastMA_2 = " ,FastMA_2, "SlowMA_1 = " , SlowMA_1, "SlowMA_2 = " , SlowMA_2);
           return ( 20 );  
        }                       // Открытие Sell 
  
//--------------------------------------------------------------- 6 --
   return ( 0 );                           // Выход из пользов. функции
  }
//--------------------------------------------------------------- 7 --

//для оптимизации по всем ТФ
int GetPeriod( int period)
{ int periodres;
 switch (period)
  {
   case 1 : periodres= 1 ; break ;
   case 2 : periodres= 5 ; break ;
   case 3 : periodres= 15 ; break ;
   case 4 : periodres= 30 ; break ;
   case 5 : periodres= 60 ; break ;
   case 6 : periodres= 240 ; break ;
   case 7 : periodres= 1440 ; break ;
   case 8 : periodres= 10080 ; break ;
   default : periodres= 1 ; break ;
  }
return (periodres);
} 


int type_op_DeMarker( double D1, double D2, double F1, double F2, double S1, double S2) // Функция - условия для входа в рынок и сохранения их через переменные Buy_signal и Sell_signal (даже после их сработки - до отмены
               // противоположными сигналами)
               
{
      
     if (D2-S2 < 0 && D1-S1 > 0 && D1 > F1  && D1 < DeMarker_OpenLevel_Buy)
          {
             DeMarker_Buy_signal=true;
             DeMarker_Sell_signal=false;
             return (OP_BUY);
          } 
  
       if (D2-S2 > 0 && D1-S1 < 0 && D1 < F1 && D1 > DeMarker_OpenLevel_Sell)                                                                                   
          {
             DeMarker_Buy_signal=false;
             DeMarker_Sell_signal=true;
             return (OP_SELL);
          }   
   else return (- 1 );
     
}

int type_op_MA( double d1, double d2, double f1, double f2, double s1, double s2) // условия для входа в рынок и сохранения их через переменные Buy_signal и Sell_signal (даже после их сработки - до отмены
               // противоположными сигналами)
               

  {
          
     if (f2 - s2 < 0 && f1 - s1 > 0 )
          {
             MA_Buy_signal=true;
             MA_Sell_signal=false;
             return (OP_BUY);
          } 
  
       if (f2-s2 > 0 && f1-s1 < 0 )                                                                                                               
          {
             MA_Buy_signal=false;
             MA_Sell_signal=true;
             return (OP_SELL);
          }   
   else return (- 1 );

  }

추가로 이동해야 합니다. 주요 기준이 TimeCurrent를 통해 트리거될 때 현재 시간을 기억합니다. 유추하여 첫 번째 f-ii int type_op_DeMarker에서 반환 하기 전에 지정합니다(OP_BUY). 또는 반환 (OP_SELL); x = TimeCurrent와 같은 표현; 여기서 x는 날짜/시간 유형의 전역 변수입니다. 그런 다음 두 번째 함수 int type_op_MA ...로 동일한 작업을 수행합니다. 변수 y = TimeCurrent를 이미 기억하고 있습니다.

다음으로, 거래 기준을 계산하기 위한 블록에서 다음과 같은 방식으로 이 두 변수의 플러스와 값을 비교합니다. 두 거래 신호 도착):

 // Вычисление торговых критериев
   
   if (( (type_op_DeMarker(DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (DeMarker_Buy_signal == true && DeMarker_Sell_signal== false )) &&   // когда DeMarker пересекает медленую (выше уровня бай (0.7)) для лонг
      ( (type_op_MA (DeMarker_1,DeMarker_2,FastMA_1, FastMA_2, SlowMA_1, SlowMA_1)==OP_BUY) || (MA_Buy_signal== true && MA_Sell_signal== false )) && // пересечение МА DeMarkers
   
   
      ((x+ 43200 ) < y )) //43200 - это количество секунд в 12-ти часах
     
         {
           Print ( "Время сработки первого условия х(в секундах) = " , х, " Время сработки второго условия y (в секундах) = " , y);
           Print ( "DeMarker_1 = " , DeMarker_1, "DeMarker_2 = " ,DeMarker_2, "FastMA_1 = " , FastMA_1, "FastMA_2 = " ,FastMA_2, "SlowMA_1 = " , SlowMA_1, "SlowMA_2 = " , SlowMA_2);
           return ( 10 );                       // Открытие Buy    
         }

추신 플러스로 작동하는 TF의 가치를 최적화할 수 있는 가능성에 대해 f-th를 보내드립니다.

추신 따라서 유사한 코드 구성이 나를 위해 구성됩니다. Expert Advisor의 이러한 조건을 충족시키기 위한 최적의 코드 옵션이 훨씬 더 많다는 것을 배제하지 않습니다. :-)))

 

하나의 통화 쌍에 대한 고문의 이익을 계산하는 방법???

예를 들어, 유로화로 다른 가격에 7개의 미결 매수 주문이 있습니다. 다른 쌍에 대한 다른 주문을 건드리지 않고 유로에서 이익을 계산하는 방법????

 

모든 미결 주문을 스캔하려면 SelectOrder를 사용하십시오.

쌍(OrderSymbol)이 필요한지 확인하십시오.

그런 다음 필수 주문인 OrderProfit인 경우 모든 변수에 이익을 추가합니다.

다음은 유용한 기능이 있는 링크입니다. https://docs.mql4.com/en/trading/OrderSelect

왼쪽에는 작업이 포함된 메뉴가 있으며 여기에는 모두 설명되어 있습니다.