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

 
kilnart :

Tweezers 패턴에 대한 Expert Advisor를 작성하고 싶습니다.

개봉 조건으로 선정

유감스럽게도 'sl'이 100.00000의 가격으로 설정되고 'tp'가 일반적으로 오류를 표시하기 때문에 조건이 올바르지 않은 것으로 판명되었습니다.

1틱을 고려하여 조건을 추가하기로 결정했습니다.

결과는 동일합니다. 내 문제를 해결하는 방법?

Step=100 변수가 있습니까? 그렇다면 코드에서 다음에 무슨 일이 일어나는지 보십시오.

 
      Step=MarketInfo(Symb,MODE_STOPLEVEL);
 
kilnart :

봐, 세미콜론(;),

  Low2=Low[ iLowest ( NULL , 0 ,MODE_LOW, 10 , 2 )]    
  High2=High[ iHighest ( NULL , 0 ,MODE_HIGH, 10 , 2 )] 
 
예, 모든 것이 제자리에 있습니다. 나는 포럼에 글을 쓸 때 귀찮게하지 않았습니다.
 
kilnart :
예, 모든 것이 제자리에 있습니다. 나는 포럼에 글을 쓸 때 귀찮게하지 않았습니다.
다음은 코드입니다. 모든 것이 작동합니다.
 //+------------------------------------------------------------------+
//|                                                     Проверка.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   bool bull_pincet=false;
   bool bear_pincet=false;
   double sl,tp;
   int Total= OrdersTotal (); 
   double Step= MarketInfo ( Symbol (),MODE_STOPLEVEL);
//----
 double Low2=Low[ iLowest ( NULL , 0 ,MODE_LOW, 10 , 2 )];    
 double High2=High[ iHighest ( NULL , 0 ,MODE_HIGH, 10 , 2 )];     

if (Low[ 1 ]==Low2 ) bull_pincet=true;
if (High[ 1 ]==High2) bear_pincet=true;
   while (true)
      {
       
       if (Total== 0 && bull_pincet==true)
        {
         sl=Low[ 1 ];
         if (sl<Step)sl=Step;
         tp=Ask+((Ask-sl)* 2 );
                  
         OrderSend ( Symbol (),OP_BUY, 0.01 ,Ask, 3 ,sl,tp);
         return ;
        }

         if (Total== 0 && bear_pincet==true)
         {
          sl=High[ 1 ];
           if (sl<Step)sl=Step;
          tp=Bid-((sl-Bid)* 2 );
           OrderSend ( Symbol (),OP_SELL, 0.01 ,Bid, 3 ,sl,tp);
           return ;
         }
       break ;
      }   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
코드가 작동하지 않습니다. 복사, 붙여넣기, 일부 오류 수정, 결과는 나와 동일합니다. 손절매 는 100.00000입니다
 
복사, 붙여넣기, 일부 오류 수정, 결과 - 테스터의 코드는 4번째 문자에서 작동합니다.
 int init() { return ( 0 );}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit(){ return ( 0 ); }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   bool bull_pincet=false;
   bool bear_pincet=false;
   double sl,tp;
   int Total= OrdersTotal (); 
   double Step= MarketInfo ( Symbol (),MODE_STOPLEVEL);
//----
double Low2=Low[ iLowest ( NULL , 0 ,MODE_LOW, 10 , 2 )];    
double High2=High[ iHighest ( NULL , 0 ,MODE_HIGH, 10 , 2 )];     

if (Low[ 1 ]==Low2 ) bull_pincet=true;
if (High[ 1 ]==High2) bear_pincet=true;
   while (true)
      {
       if (Total== 0 && bull_pincet==true)
        {
         sl=Low[ 1 ];
         if (sl>Bid-Step* Point )sl=Bid-Step* Point ;
        tp=Bid+Step* Point * 2 ;
         
         //if(sl<Step)sl=Step;
         // tp=Ask+((Ask-sl)*2);
                  
         OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 3 ,sl,tp);
         return ;
        }

         if (Total== 0 && bear_pincet==true)
         {
          sl=High[ 1 ];
           if (sl<Ask+Step* Point )sl=Ask+Step* Point ;
         tp=Ask-Step* Point * 2 ;
         //  if(sl<Step)sl=Step;
         // tp=Bid-((sl-Bid)*2);
           OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,sl,tp);
           return ;
         }
       break ;
      }   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
Fillelin :
여기에서 비슷한 스크립트를 제공할 수 있습니다.

코드의 설명.

고맙습니다! 스크립트라면 그렇게 할 것입니다. 스크립트를 전문가에게 추가하면 조언자 역할을 할 수 있습니다.

컴파일된 어드바이저에 관해서는 - 컴파일할 수 없었고 결국 오류가 발생했습니다.

'GetNameOP' - function is not defined C:\Program Files (x86)\IamFX MT4\experts\VirtTPSL-Tr_EA.mq4 (45, 31)
'ErrorDescription' - function is not defined C:\Program Files (x86)\IamFX MT4\experts\VirtTPSL-Tr_EA.mq4 (45, 49)
수정 후에도 2개의 사용자 정의 기능이 누락되었습니다.
 
Roll :
복사, 붙여넣기, 일부 오류 수정, 결과 - 테스터의 코드는 4번째 문자에서 작동합니다.

잘하셨어요 . Step=0인지 보자

   if (sl>Bid-Step* Point )sl=Bid-Step* Point ;
  tp=Bid+Step* Point * 2 ;

sl 및 tp와 같을 것

그리고 이 문제를 제기한 사람은 순서를 sl=0, tp=0 으로 설정한 다음 수정해야 합니다.

아마 그렇게 될 것입니다.

 
Lians :

고맙습니다! 스크립트라면 그렇게 할 것입니다. 스크립트를 전문가에게 추가하면 조언자 역할을 할 수 있습니다.

컴파일된 어드바이저에 관해서는 - 컴파일할 수 없었고 결국 오류가 발생했습니다.

'GetNameOP' - function is not defined C:\Program Files (x86)\IamFX MT4\experts\VirtTPSL-Tr_EA.mq4 (45, 31)
'ErrorDescription' - function is not defined C:\Program Files (x86)\IamFX MT4\experts\VirtTPSL-Tr_EA.mq4 (45, 49)
수정 후에도 2개의 사용자 정의 기능이 누락되었습니다.

김이고르의 기능

https://www.mql5.com/ru/forum/107476/page6#69097

그리고 'ErrorDescription', 코드 시작 부분에 삽입

 #include <stdlib.mqh>             // Стандартная библиотека