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

 
Alexey Belyakov :

삽입됨. 하지마. 일괄적으로 열립니다. 마법 - 무시



코드를 작성할 때 논리를 러시아어로 번역하십시오. 첫째, 비교가 발생하는 특정 주기가 있습니다 . 선택한 주문 이 시장 주문이 아니면 다음 반복으로, 상품이 유로벅스가 아니면 다음 반복으로, 그리고 마술이 다음과 같지 않으면 당신의 마법, 다음 반복. 조건이 충족되면 더. 주기가 끝나면 끝까지 완료된 주기 수를 계산합니다. 사이클이 종료되고 프로그램이 조건에 따라 주문을 열기 시작합니다. 조건 중 하나가 항상 참이면 주문이 열립니다. 그리고 이것은 모든 틱에 있습니다.

 
Valeriy Yastremskiy :

코드를 작성할 때 논리를 러시아어로 번역하십시오. 첫째, 비교가 발생하는 특정 주기가 있습니다 . 선택한 주문 이 시장 주문이 아니면 다음 반복으로, 상품이 유로벅스가 아니면 다음 반복으로, 그리고 마술이 다음과 같지 않으면 당신의 마법, 다음 반복. 조건이 충족되면 더. 주기가 끝나면 끝까지 완료된 주기 수를 계산합니다. 사이클이 종료되고 프로그램이 조건에 따라 주문을 열기 시작합니다. 조건 중 하나가 항상 참이면 주문이 열립니다. 그리고 이것은 모든 틱에 있습니다.

이해합니다. 하지만 이 경우: if(OrderMagicNumber() == MagicNumber)continue; 주문은 매직이 주문한 대로 처리됩니다. 즉, Eurobucks에 대해 수동으로 주문한 주문은 무시되어야 하고 마술사가 있는 다른 전문가가 열어야 합니다.

OrdersTotal() - 이 감염은 마술사와의 모든 조작을 끝냅니다.
 
Alexey Belyakov :

이해합니다. 하지만 이 경우: if(OrderMagicNumber() == MagicNumber)continue; 주문은 매직이 주문한 대로 처리됩니다. 즉, Eurobucks에 대해 수동으로 주문한 주문은 무시되어야 하고 마술사가 있는 다른 전문가가 열어야 합니다.

OrdersTotal() - 이 감염은 마술사와의 모든 조작을 끝냅니다.

코드는 위에서 아래로 실행됩니다. 주기의 규칙에 따라 주기에서. 주기가 끝나면 주문을 합니다. if(OrderMagicNumber() == MagicNumber) 계속; 루프 본문의 실행을 중단하고 루프의 새 반복을 시작합니다. 그리고 그게 다야. 주기가 종료되고 주문이 시작됩니다. 이렇게 작성하셨습니다. 그리고 주문의 총 수는 그것과 관련이 없습니다. 마법과 악기로 주문이 없으면 주문을 하는 조건을 만들고 싶다면 코드가 달라야 합니다.

주문 번호로 순환합니다. 우리의 마법과 도구에 주문이 있는 경우 반환은 처음부터 출구입니다. 또는 귀하의 주문이 존재하고 온틱의 시작 부분에 플래그가 있거나 플래그로 확인하기 시작합니다.

그리고 템플릿에서 어드바이저를 생성하여 어드바이저 스크립트, 인디케이터를 생성하는 것이 좋습니다. 기본 코드 필드가 더 정확합니다.

 datetime some_time= TimeCurrent ();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P= 1 ;           //Таймфрейм
extern int MagicNumber = 100500 ;


int start()
{

int send;
                                     
double SL= 200 ;                                   
double TP= 200 ;                       
double Lots= 1 ;       

for ( int i = OrdersTotal (); i >= 0 ; i--) 
{
       OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber) return ( 0 );
}
          

             
if ((Close[ 0 ]>High[ 1 ])&&(n== 0 ))
{
send= OrderSend ( "EURUSD" ,OP_BUY,Lots,Ask, 3 ,Bid-SL* Point ,Bid+TP* Point ,MagicNumber);
}

if ((Close[ 0 ]<Low[ 1 ])&&(n== 0 ))  
{
send= OrderSend ( "EURUSD" ,OP_SELL,Lots,Bid, 3 ,Ask+SL* Point ,Ask-TP* Point ,MagicNumber);
}

return ( 0 );
}
 
Valeriy Yastremskiy :

코드는 위에서 아래로 실행됩니다. 주기의 규칙에 따라 주기에서. 주기가 끝나면 주문을 합니다. if(OrderMagicNumber() == MagicNumber) 계속; 루프 본문의 실행을 중단하고 루프의 새 반복을 시작합니다. 그리고 그게 다야. 주기가 종료되고 주문이 시작됩니다. 이렇게 작성하셨습니다. 그리고 주문의 총 수는 그것과 아무 관련이 없습니다. 마법과 악기로 주문한 것이 없으면 주문을 하는 조건을 만들고 싶다면 코드가 달라야 합니다.

주문 번호로 순환합니다. 우리의 마법과 도구에 주문이 있는 경우 반환은 처음부터 출구입니다. 또는 귀하의 주문이 존재하고 온틱의 시작 부분에 플래그가 있거나 플래그로 확인하기 시작합니다.

그리고 템플릿에서 어드바이저를 생성하여 어드바이저 스크립트, 인디케이터를 생성하는 것이 좋습니다. 기본 코드 필드가 더 정확합니다.

 for ( int i = OrdersTotal (); i >= 0 ; i--) 
{
       OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber) return ( 0 );
}

나는 이것이 해결책이 아니라는 것을 이해하지만 어떤 방향으로 일해야합니까?

나는 이미 몇 가지 destyakov varintov를 시도했습니다. 하나의 주문을 열거나 중단 없이 tuevukuchu를 엽니다.

그런데 여기서 OrderSekect를 재정렬합니다. bool 유형 변수를 설정해야 합니다. 그렇지 않으면 맹세합니다.

 
Alexey Belyakov :

나는 이것이 해결책이 아니라는 것을 이해하지만 어떤 방향으로 일해야합니까?

나는 이미 몇 가지 destyakov varintov를 시도했습니다. 하나의 주문을 열거나 휴식 없이 tuevukuchu를 엽니다.

그런데 여기서 OrderSekect를 재정렬합니다. bool 유형 변수를 설정해야 합니다. 그렇지 않으면 맹세합니다.

예, 맹세해야 합니다. 아무데도 돌아오지 않습니다.

 for ( int i = OrdersTotal (); i >= 0 ; i--) 
{
     bool sel = OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() == "EURUSD" && OrderMagicNumber() == MagicNumber) return ( 0 );
}

하고 싶은 알고리즘을 더 잘 작성하십시오. 그래서 무엇이 필요한지 명확하지 않습니다.

 
Alexey Belyakov :

나는 이것이 해결책이 아니라는 것을 이해하지만 어떤 방향으로 일해야합니까?

나는 이미 몇 가지 destyakov varintov를 시도했습니다. 하나의 주문을 열거나 중단 없이 tuevukuchu를 엽니다.

그런데 여기서 OrderSekect를 재정렬합니다. bool 유형 변수를 설정해야 합니다. 그렇지 않으면 맹세합니다.

return(0) 대신에 의미가 계속되어야 합니다.

 

착하고 지식이 풍부한 사람들! MT5 EA에서 봉투 표시기를 구현하는 데 도움을 주세요. EA 자체는 모든 틱을 처리해야 합니다(갭 없음). 몇 가지 옵션을 시도하고 설명서를 보니 거기에 있는 옵션이 마음에 들었지만 OnCalculate 처리기를 위한 것입니다. 아직 표준 라이브러리 를 엉망으로 만들려고 시도하지 않았습니다 ... 일반적으로 이것은 초기 구현입니다.

 input int        Indicatorperiod         = 3 ;
input double     EnvelopesDeviation      = 0.07 ;
int     handle;                                           //--- переменная для хранения хэндла индикатора iEnvelopes
double upperEnv[ 3 ], lowerEnv[ 3 ];                         // динамические массивы для хранения численных значений Emvelopes
double local_envelopesupper, local_envelopeslower;       // в эти переменные пытаюсь получить значения верхней и нижней линии индикатора
...

int OnInit ()
...
handle= iEnvelopes ( _Symbol , _Period ,Indicatorperiod, 0 , MODE_LWMA , PRICE_OPEN ,EnvelopesDeviation);
...

void OnTick ()
...
//--- Объявляем структуру, которая будут использоваться
   MqlRates mrate[ 3 ];           // Будет содержать цены, объемы и спред для каждого бара
   ArraySetAsSeries (mrate, true ); 

       //--- Получить исторические данные последних 3-х баров
       if ( CopyRates ( _Symbol , _Period , 0 , 3 ,mrate)!= 3 )
        {
         Alert ( "Ошибка копирования исторических данных - ошибка:" , GetLastError (), "!!" );
         return ;
        }

       //--- Используя хэндлы индикаторов, копируем новые значения индикаторных буферов в массивы
       if ( CopyBuffer (handle, 0 , 0 , 3 ,upperEnv)< 2 || CopyBuffer (handle, 1 , 0 , 3 ,lowerEnv)< 2 )
        {
         Alert ( "Ошибка копирования буферов индикатора Envelopes - номер ошибки:" , GetLastError (), "!!" );
         return ;
        }
...
local_envelopesupper = upperEnv[ 1 ];
local_envelopeslower = lowerEnv[ 1 ];
...

비주얼 테스터에서 나는 다음을 얻습니다.


무엇이 잘못되었으며 어떻게 하면 더 잘할 수 있는지 알려주세요.
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Некорректное отображение индикатора
 
Valeriy Yastremskiy :

예, 맹세해야 합니다. 아무데도 돌아오지 않습니다.

하고 싶은 알고리즘을 더 잘 작성하십시오. 그래서 무엇이 필요한지 명확하지 않습니다.

코드는 첫 번째 게시물에 있습니다. 간단합니다. 이전 고가/저가를 돌파하고 거래를 시작하십시오. 이 고문이 개설한 주문은 수동으로 개설한 다른 주문이나 다른 고문이 개설한 주문과 교차하지 않아야 합니다.

인터넷 전체가 뒤죽박죽. 주제는 다소 해킹되었지만 많은 변형이 있습니다. 그런 간단한 일이고 어디에도 없습니다.

 
Alexey Belyakov :

코드는 첫 번째 게시물에 있습니다. 간단합니다. 이전 고가/저가를 돌파하고 거래를 시작하십시오. 이 고문이 개설한 주문은 수동으로 개설한 다른 주문이나 다른 고문이 개설한 주문과 교차하지 않아야 합니다.

인터넷 전체가 뒤죽박죽. 주제는 다소 해킹되었지만 많은 변형이 있습니다. 그런 간단한 일이고 어디에도 없습니다.

어드바이저의 작업을 단계별로 완전히 설명하십시오. 첫 번째 단계는 선택한 악기에 마법 주문이 있는지 확인하는 것입니다. 있으면 작업을 끝내고, 없으면 명령을 내립니다. 주문 후, 무엇? 이 같은
 
Maxim Kuznetsov :

return(0) 대신 의미가 계속되어야 합니다.

거기, 같으면 더 이상 진행하지 않고 끝냅니다. .. 마음에 들지 않고 동일하지 않으면 더 진행합니다. 더 이해하기 어렵습니다.