[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 832

 
Vinin :

다음에는 무엇이 바뀔까요?
똑같다. 포지션이 마감되었습니다 - 보류 주문이 접수되었습니다. 마지막 값을 반환하는 함수(예: OrderCloseTime())를 사용할 수 있습니다. 각 틱으로 마지막 마감 위치(위치 #1)의 마감 시간 값을 얻습니다. 새로운 틱으로 다음 포지션(2번 포지션)을 마감할 때, 이 (2번 포지션) 포지션의 마감 시간을 얻습니다. OrderCloseTime()의 값이 이전 값에 비해 변경되었습니다. 등. 나는 변수가 어떻게 그리고 얼마나 많이 바뀌었는지 상관하지 않는다. 변수를 변경한다는 사실 자체가 나에게 중요합니다. 이것은 논리적 연산과 같습니다. 마지막 닫힌 위치의 OrderCloseTime()이 끝에서 두 번째 위치의 OrderCloseTime()보다 크면 ㅋㅋㅋㅋㅋㅋ 또한 - 마지막 마감 위치의 OrderClosePrice()가 두 번째 위치의 OrderClosePrice()와 같지 않으면 BLA-BLA-BLA를 수행합니다. 아니면 그런 비교가 없나요?
 
여기에 나온 질문이 있습니다. 어드바이저에서 지표(예: CCI를 취함)가 상향식에서 특정 수준(빨간색 선)을 넘을 때 매수 신호가 나타나고 위에서 하향식일 때 각각 매도 신호가 나타난다고 가정해 보겠습니다. Bar A가 형성되는 동안 주문이 한 번만 열릴 수 있도록 하려면 어떻게 해야 합니까? 저것들. 표시기가 막대 A를 형성할 때 레벨(빨간색 선)을 여러 번 교차한 다음 아래로, 위로 교차한다고 가정해 보겠습니다. 내가 말했듯이, 당신은 주문이 한 번만 열렸는지 확인해야 합니다.

동시에, 막대 D에서 매도 신호를 받았을 때(차트의 상황 2) 막대 A에서 열린 주문 이 닫히지 않고 전혀 영향을 받지 않아야 합니다 .

저것들. 개통 후, 주문은 고문에 의해 어떤 식으로든 통제되지 않습니다.


미리 감사드립니다.

 

Demark Sequence 코드를 Expert Advisor에 첨부하도록 도와주세요 https://www.mql5.com/ru/code/7372

다음과 같이 작동하지 않습니다.

숫자=0:

for(i=막대, i>=0, i--)
{
if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4) && num!=0 )) {
숫자++;


if ((iClose(NULL,PERIOD_M5,i+1)<iClose(NULL,PERIOD_M5,i+4))
구입.......

경우(숫자==9)
닫다........

 
Vinin :


1. 첫 번째 유형의 주문 수를 계산합니다.

2. 두 번째 유형의 주문 수를 계산합니다.

3. 결과 비교


친애하는 비닌. 매우 감사합니다!
 
Forrim :
여기에 나온 질문이 있습니다. 어드바이저에서 지표(예: CCI를 취함)가 상향식에서 특정 수준(빨간색 선)을 넘을 때 매수 신호가 나타나고 위에서 하향식일 때 각각 매도 신호가 나타난다고 가정해 보겠습니다. Bar A가 형성되는 동안 주문이 한 번만 열릴 수 있도록 하려면 어떻게 해야 합니까? 저것들. 표시기가 막대 A를 형성할 때 레벨(빨간색 선)을 여러 번 교차한 다음 아래로, 위로 교차한다고 가정해 보겠습니다. 내가 말했듯이, 당신은 주문이 한 번만 열렸는지 확인해야 합니다.

동시에, 막대 D에서 매도 신호를 받았을 때(차트의 상황 2) 막대 A에서 열린 주문 이 닫히지 않고 전혀 영향을 받지 않아야 합니다 .

저것들. 개통 후, 주문은 고문에 의해 어떤 식으로든 통제되지 않습니다.


미리 감사드립니다.

일반적으로 CCI는 너무 격렬하게 점프하므로 Bar가 종료되고 새로운 Bar가 열린 후에 확인하는 것이 좋습니다.

글쎄, 그것이 현재 하나에 매우 중요하다면 각 교차점에서 전역 변수 에서 촛불의 시작 시간을 기억하고 시간이 다른지 확인해야합니다 (그렇다면 주문이 열림) 또는 동일합니다(=> 열린 주문 없음).

 
Forrim :
여기에 나온 질문이 있습니다. 어드바이저에서 지표(예: CCI를 취함)가 상향식에서 특정 수준(빨간색 선)을 넘을 때 매수 신호가 나타나고 위에서 하향식일 때 각각 매도 신호가 나타난다고 가정해 보겠습니다. Bar A가 형성되는 동안 주문이 한 번만 열릴 수 있도록 하려면 어떻게 해야 합니까? 저것들. 표시기가 막대 A를 형성할 때 레벨(빨간색 선)을 여러 번 교차한 다음 아래로, 위로 교차한다고 가정해 보겠습니다. 내가 말했듯이, 당신은 주문이 한 번만 열렸는지 확인해야 합니다.

동시에, 막대 D에서 매도 신호를 받았을 때(차트의 상황 2) 막대 A에서 열린 주문 이 닫히지 않고 전혀 영향을 받지 않아야 합니다 .

저것들. 개통 후, 주문은 고문에 의해 어떤 식으로든 통제되지 않습니다.


미리 감사드립니다.

이 유형의 위치가 이미 열려 있으면 다시 열지 마십시오.
 
//--------------------------------------------------------------- 1 --
                                   // Численные значения для М15
extern double StopLoss   = 20 ;       // SL для открываемого ордера
extern double TakeProfit = 20 ;       // ТР для открываемого ордера
extern double Step_Sar= 0.02 ;       // Шаг Sar
extern double Maximum_Sar= 0.2 ;     // Максимум Sar
extern double Lot= 0.01 ;             // Жестко заданное колич. лотов
bool Work=true;                     // Эксперт будет работать.
//--------------------------------------------------------------- 2 --
int start()
  { 
   int    
   Total,                           // Количество ордеров в окне 

   Ticket;                           // Номер ордера
   
   double
   Sar_1 ,                           // Значен. Sar текущее
   Sar_0 ,                           // Значение Sar предыдущей свечки      
   Price,                           // Цена ордера
   SL,                               // SL ордера 
   TP;                               // TP ордера
   
   bool
   Ans  =false,                     // Ответ сервера после закрытия
   Cls_B=false,                     // Критерий для закрытия  Buy
   Cls_S=false,                     // Критерий для закрытия  Sell
   Opn_B=false,                     // Критерий для открытия  Buy
   Opn_S=false;                     // Критерий для открытия  Sell
   
//--------------------------------------------------------------- 3 --   
   // Учёт ордеров   

   Total= 0 ;                                     // Количество ордеров
   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!= Symbol ()) continue ;       // Не наш фин. инструм
         if (OrderType()> 1 )                     // Попался отложенный
           {
             Alert ( "Обнаружен отложенный ордер. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total> 1 )                           // Не более одного орд
           {
             Alert ( "Несколько рыночных ордеров. Эксперт не работает." );
             return ;                             // Выход из start()
           }

   
     
       
        
    
         
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                 // SL выбранного орд.
         TP    =OrderTakeProfit();               // TP выбранного орд.
         Lot   =OrderLots();                     // Количество лотов
         }
         }
   
//--------------------------------------------------------------- 6 --
   // Торговые критерии
   Sar_1= iSAR ( NULL , 0 , 0.02 , 0.2 , 1 );           // Sar_1
   Sar_0= iSAR ( NULL , 0 , 0.02 , 0.2 , 0 );           // Sar_0
 
   if (Sar_0 > Price && Sar_1 < Price)           // если Sar меняет положение
     {
      Opn_B=true;                               // Критерий откр. Buy             
     }  
   if (Sar_0 < Price && Sar_1 > Price)           // если Sar меняет положение
     {                                          
      Opn_S=true;                               // Критерий откр. Sell                                   
     }   
//--------------------------------------------------------------- 7 --
  
     {
       if (Opn_B==true)         
        {                                       // критерий откр. Buy
         RefreshRates();                         // Обновление данных
         SL=( 20 +Ask-Bid)*Bid;                 // Вычисление SL откр.
         TP= 20 *Bid;                           // Вычисление TP откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend ( Symbol (),OP_BUY,Lot,Ask, 0 ,SL,TP); //Открытие Buy                         
        }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
                                   
         return ;                                 // Выход из start()
        
        
       if (Opn_S==true)                           // критерий откр. Sell
      
        {                                       // критерий откр. Sell
         RefreshRates();                         // Обновление данных
         SL=( 20 +Ask-Bid)*Ask;                 // Вычисление SL откр.
         TP= 20 *Ask;                           // Вычисление TP откр.
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend ( Symbol (),OP_SELL,Lot,Bid, 0 ,SL,TP); //Открытие Sel
         
         return ;                                 // Выход из start()
        }
        
       if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
                      
         return ;                                 // Выход из start()
        
     }
//--------------------------------------------------------------- 9 --
   return ;                                       // Выход из start()
  }
//-------------------------------------------------------------- 10 --
int Fun_Error( int Error)                         // Ф-ия обработ ошибок
  {
   switch (Error)
     {                                           // Преодолимые ошибки            
       case    4 : Alert ( "Торговый сервер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
         RefreshRates();                         // Обновим данные
         return ( 1 );                             // Выход из функции
       case 136 : Alert ( "Нет цен. Ждём новый тик.." );
         while (RefreshRates()==false)           // До нового тика
             Sleep ( 1 );                           // Задержка в цикле
         return ( 1 );                             // Выход из функции
       case 137 : Alert ( "Брокер занят. Пробуем ещё раз.." );
         Sleep ( 3000 );                           // Простое решение
         return ( 1 );                             // Выход из функции
       case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
         Sleep ( 500 );                             // Простое решение
         return ( 1 );                             // Выход из функции
         // Критические ошибки
       case    2 : Alert ( "Общая ошибка." );
         return ( 0 );                             // Выход из функции
       case    5 : Alert ( "Старая версия терминала." );
         Work=false;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 64 : Alert ( "Счет заблокирован." );
         Work=false;                             // Больше не работать
         return ( 0 );                             // Выход из функции
       case 133 : Alert ( "Торговля запрещена." );
         return ( 0 );                             // Выход из функции
       case 134 : Alert ( "Недостаточно денег для совершения операции." );
         return ( 0 );                             // Выход из функции
       default : Alert ( "Возникла ошибка " ,Error); // Другие варианты   
         return ( 0 );                             // Выход из функции
     }
  }
//-------------------------------------------------------------- 11 --

기본 고문은 가격 차트와 관련하여 포물선 SAR 표시기의 위치가 변경될 때 위치를 열어야 하며, M15, SL 및 TP에서 작업하는 것은 열려 있는 위치에 대해 항상 일정합니다.

EA는 현재 및 이전 캔들의 표시기 위치를 비교합니다.

컴파일할 때 "결과" "그래프" "보고서" 탭에서 테스트할 때 오류 및 설명이 없습니다. 로그에는 "그림"이 있습니다.

코딩 2일차인데 한 번도 해본 적이 없고 mql에서 책을 읽고 인터넷에서 내 문제를 찾았습니다. 막다른 골목에 있습니다 도와주세요


 

THC , 이것을 시도하십시오




파일:
0000001_1.mq4  3 kb
 
Techno :

THC , 이것을 시도하십시오




정말 감사합니다. 이러한 효율성과 코드의 이러한 변경을 기대하지 않았습니다.

기본 mql을 제외하고 프로그래밍에 대한 더 많은 책을 조언하십시오.

 
THC :

정말 감사합니다. 이러한 효율성과 코드의 이러한 변경을 기대하지 않았습니다.

기본 mql을 제외하고 프로그래밍에 대한 더 많은 책을 조언하십시오.

나는 기본적인 것만 읽었고, 완전한 이해는 시간이 지남에 따라, 단지 더 많은 쓰기 연습이 필요합니다