나는 무료 mql4 고문을 작성할 것입니다 - 페이지 13

 
oleg3791 : EA가 차트에서 5번의 마우스 클릭으로 4개의 라인을 만들었습니다.

필수 노란색 선

 #property strict

int       Количество;
datetime старый, новый= 0 ;
double    старая, новая= 0 ;

void OnInit ()
{
  Количество= 0 ;
   ObjectsDeleteAll ( 0 , "Линия" );
}

void OnChartEvent ( const int      id,   // идентификатор события   
                   const long &x, const double &yy,
                   const string & s)
{
   if (id!= CHARTEVENT_CLICK ) return ;
   if (Количество> 4 ){ OnInit (); return ;}
   string name[ 5 ]={ "" , "Линия_1" , "Линия_2" , "Линия_3" , "Линия_4" };
   int y= int (yy);
   int O;
  старый=новый; старая=новая;
   ChartXYToTimePrice ( 0 , int (x),y,O,новый,новая); // xy ---> время,цену
   if (Количество> 0 )
   ObjectCreate (name[Количество], OBJ_TREND , 0 ,старый,старая,новый,новая);
   ObjectSet (name[Количество], OBJPROP_RAY , false );
   ObjectSet (name[Количество], OBJPROP_COLOR ,Gold);
   ObjectSet (name[Количество], OBJPROP_WIDTH , 2 );
  Количество++; 
}

void OnDeinit ( const int причина)
{
   OnInit ();
}
 
STARIJ :

필수 노란색 선

감사해요!!!
 
oleg3791 : !!!

이제 여기에서 수익을 얻는 방법을 알려주세요... 아니면 게임을 빌드하는 데 필요한가요?

 

안녕하세요 여러분, 고문의 코드에서 오류를 찾도록 도와주세요. 모든 것을 살펴본 것 같습니다. 모든 것이 코드에 올바르게 작성된 것 같지만 어떤 이유로 프로그램이 올바르게 거래되지 않습니다! 아이디어는 다음과 같습니다. EA는 동일한 방향의 두 개의 긴 양초를 찾아야 합니다(양초 사이의 길이는 EA에서 규제됩니다. 즉, 방향에 따라 양초의 최소 또는 최대 두 개 사이). 반대 방향으로 마지막 캔들의 최소값 또는 최대값을 깨면 거래가 시작되어야 합니다(파일에 첨부된 차트의 상황 사진 예시). EA는 각각의 적절한 상황에서 거래를 개시해야 하며, 어떤 이유에서인지 날짜 사이의 거래 창에서만 거래를 엽니다. 이것은 프로그래머에게 어렵지 않은 상황입니다. 도와주세요. 오류를 수정하십시오. 아래의 어드바이저 코드와 첨부파일을 참고하세요.

 //+-----------------------------------------------------------------------------------------------+
//|                                                                           Spacing_Candles.mq4 |
//|                                                                        Copyright 2017, Vladim |
//|                                                                            vk.com/id229534564 |
//|                                                                  Mail: Vladim120385@yandex.ru |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2017, Vladim"
#property link        "vk.com/id229534564"
#property version    "1.00"
#property strict

//--- параметры советника
extern string paramEA    = "" ;     // Parameters EA
extern double volume     = 0.01 ;   // Volume
extern double stopLoss   = 5 ;     // StopLoss
extern double takeProfit = 1.5 ;     // TakeProfit
extern double maxSpacing = 150 ;   // MaxSpacing
extern double minSpacing = 30 ;     // MinSpacing
extern double TrailingStop  = 0 ;   // TrailingStop
extern int     magic      = 127 ;     // Magic

//--- глобальные переменные
datetime newCandle;
int tip;

//+-----------------------------------------------------------------------------------------------+
int OnInit ()
{
   
   return ( INIT_SUCCEEDED );
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   
}
//+-----------------------------------------------------------------------------------------------+
void OnTick ()
{
   if (newCandle != Time [ 0 ]) FindPattern();
   newCandle = Time [ 0 ];
}
//+-----------------------------------------------------------------------------------------------+
void OpenOrder( int type)   // Откроем рыночный ордер
{
   if (type == OP_BUY )   if ( OrderSend ( _Symbol , OP_BUY ,  volume, Ask , 0 , 0 , 0 , "" , magic, 0 )) SetSLTP( OP_BUY );
   if (type == OP_SELL ) if ( OrderSend ( _Symbol , OP_SELL , volume, Bid , 0 , 0 , 0 , "" , magic, 0 )) SetSLTP( OP_SELL );
}
//+-----------------------------------------------------------------------------------------------+
void SetSLTP( int type)   // Установим стоп приказы
{
   double sl = 0 ;
   double tp = 0 ;
   
   if (type == OP_BUY )
       for ( int i = 0 ; i < OrdersTotal (); i++)
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
             if ( OrderSymbol () == _Symbol && OrderMagicNumber () == magic && OrderType () == OP_BUY && OrderStopLoss () == 0 )
            {
               sl = NormalizeDouble ( Low [ 1 ] - stopLoss * _Point , _Digits );
               tp = NormalizeDouble ( OrderOpenPrice () + ( OrderOpenPrice () - Low [ 1 ]) * takeProfit, Digits );
               if ( OrderModify ( OrderTicket (), OrderOpenPrice (), sl, tp, 0 )) return ;
            }
   if (type == OP_SELL )
       for ( int i = 0 ; i < OrdersTotal (); i++)
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
             if ( OrderSymbol () == _Symbol && OrderMagicNumber () == magic && OrderType () == OP_SELL && OrderStopLoss () == 0 )
            {
               sl = NormalizeDouble ( High [ 1 ] + stopLoss * _Point , _Digits );
               tp = NormalizeDouble ( OrderOpenPrice () - ( High [ 1 ] - OrderOpenPrice ()) * takeProfit, Digits );
               if ( OrderModify ( OrderTicket (), OrderOpenPrice (), sl, tp, 0 )) return ;
            }
}
//+-----------------------------------------------------------------------------------------------+
void FindPattern()   // Ищем большое расстояние между свечами
{
   if ( High [ 1 ] < High [ 2 ] && Bid > High [ 1 ] && Low [ 1 ] < Low [ 2 ])
   {
       double spacing = NormalizeDouble (( High [ 2 ] - High [ 1 ]) / _Point , 0 );
            
       if (maxSpacing >= spacing && minSpacing <= spacing)
         OpenOrder( OP_BUY );
   }
   if ( Low [ 1 ] > Low [ 2 ] && Bid < Low [ 1 ] && High [ 1 ] > High [ 2 ])
   {
       double spacing = NormalizeDouble (( Low [ 1 ] - Low [ 2 ]) / _Point , 0 );
            
       if (maxSpacing >= spacing && minSpacing <= spacing)
         OpenOrder( OP_SELL );
   }   
   {
       if (TrailingStop!= 0 ) TrailingStop();      
   }
}
//+-----------------------------------------------------------------------------------------------+
void TrailingStop()
{
   double StLo,OSL,OOP;
   bool error= true ;   
   for ( int i= 0 ; i< OrdersTotal (); i++) 
   {
       if ( OrderSelect (i, SELECT_BY_POS ))
      {
         tip = OrderType ();
         if (tip< 2 && OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic)
         {
            OSL   = NormalizeDouble ( OrderStopLoss (), Digits );
            OOP   = NormalizeDouble ( OrderOpenPrice (), Digits );
             if (tip== 0 )        
            {  
               StLo = NormalizeDouble ( Bid - TrailingStop* Point , Digits );
               if (StLo < OOP) continue ;
               if (StLo > OSL)
                  error= OrderModify ( OrderTicket (), OrderOpenPrice (),StLo, OrderTakeProfit (), 0 ,White);

            }                                         
             if (tip== 1 )    
            {                                         
               StLo = NormalizeDouble ( Ask + TrailingStop* Point , Digits );           
               if (StLo > OOP) continue ;
               if (StLo < OSL || OSL== 0 )
                  error= OrderModify ( OrderTicket (), OrderOpenPrice (),StLo, OrderTakeProfit (), 0 ,White);
            } 
             if (!error) Alert ( "Error TrailingStop " , GetLastError (), "   " , Symbol (), "   SL " ,StLo);
         }
      }
   }
}
//+-----------------------------------------------------------------------------------------------+


&quot;어드바이저 배치 방법&quot; 차트 사진

파일:
 
Vladim1203 :

안녕하세요 여러분, 고문의 코드에서 오류를 찾도록 도와주세요. 모든 것을 살펴본 것 같습니다. 모든 것이 코드에 올바르게 작성된 것 같지만 어떤 이유로 프로그램이 올바르게 거래되지 않습니다! 아이디어는 다음과 같습니다. 가격이 가격을 깨면 EA는 같은 방향의 두 개의 긴 양초를 찾아야 합니다(양초 사이의 길이는 EA에서 규제됩니다. 즉, 방향에 따라 두 개의 최소 또는 최대 양초 사이) 반대 방향의 마지막 양초의 최소 또는 최대, 거래가 시작되어야 합니다(파일에 첨부된 차트의 상황 사진 예시). EA는 각각의 적절한 상황에서 거래를 개시해야 하며, 어떤 이유에서인지 날짜 사이의 거래 창에서만 거래를 엽니다. 이것은 프로그래머에게 어렵지 않은 상황입니다. 도와주세요. 오류를 수정하십시오. 아래의 어드바이저 코드와 첨부파일을 참고하세요.

차트에서 발견 된 양초를 표시하도록 먼저 고문의 일부를 작성하는 것이 좋습니다. 모든 것이 명확해질 것입니다. 그리고 다음 행은 귀하의 경우 중복됩니다.

 extern string paramEA    = "" ;     // Parameters EA

и

//+-----------------------------------------------------------------------------------------------+
int OnInit ()
{
   
   return ( INIT_SUCCEEDED );
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   
}
//+-----------------------------------------------------------------------------------------------+
 
STARIJ :

이제 여기에서 수익을 얻는 방법을 알려주세요... 아니면 게임을 빌드하는 데 필요한가요?


수익은 아직 없습니다. 5가지 주요 포인트에 따라 추세에 따라 두 가지 예상 가격 목표를 계산하는 알고리즘이 있지만 유료 구독이 있는 특수 서버에서 계산됩니다. 목표를 직접 계산하고 싶습니다. 알고리즘 작업은 아직 끝나지 않았습니다.

MQL4에서 프로그램은 어떻게 생겼습니까?

 
Anton Yakovlev :
당신이 좋은 전략을 가지고 있고 그것을 공유할 준비가 되어 있다면, 나는 조언자를 쓸 수 있습니다. 공개적으로 또는 비공개 메시지로 토론하도록 초대합니다.

Anton, 알아낼 수 있도록 도와주세요. EA에 후행 중지 기능을 추가하고 컴파일했는데 두 가지 오류가 발생했습니다. - 나는 머리를 부러뜨렸고, 올빼미를 만들기 위해 수리하는 방법을 이해할 수 없습니다. 사실, 가격이 채널의 위쪽 경계선과 아래쪽 경계선에 각각 닿은 후 이전 전략의 조건에 따라 거래가 닫힙니다. 여기서도 뭔가 변화가 필요하다는 것을 이해합니다. - 조선민주주의인민공화국 군대에 대응하라.

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#속성 링크 "https://www.mql5.com"

#속성 버전 "1.00"

#속성엄격


//------------------------------------------------ ----------

extern 이중 로트 = 0.01;

extern int TakeProfit = 600;

extern int 손절매 = 25;

외부 정수 매직 = 0001;

extern int 미끄러짐 = 3;

외부 정수 TralType = 0; // 0-SAR, 1-ATR, 2-HMA

외부 이중 SAR_Step = 0.02;

외부 이중 SAR_Max = 0.2;

외부 정수 ATR_Period = 14;

외부 이중 ATR_K = 2.0;

extern int HMA_Period = 16;

extern int HMA_Method = 3;

외부 정수 HMA_Shift = 0;

날짜/시간 LBT;

//------------------------------------------------ ----------

extern string TMA = "TMA 표시기의 매개변수";

extern string TimeFrame = "현재 시간 프레임";

extern int HalfLength = 56;

extern int 가격 = PRICE_CLOSE;

외부 이중 ATRMultiplier = 2.0;

extern int ATRPPeriod = 100;

extern bool 보간 = true;

//------------------------------------------------ ----------

이중 PriceHigh, PriceLow, SL, TP;

인트 티켓;


//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

int OnInit()

{

if (숫자 == 3 || 숫자 == 5)

{

이익실현 *= 10;

손절매 *= 10;

미끄러짐 *= 10;

}

반환(INIT_SUCCESSED);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

무효 OnDeinit(const int 이유)

{


}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && 입찰가 >= 높은 가격)

{

티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰, 슬리피지, 0, 0, "TMA 로봇", 매직, 0, 레드);

만약 (티켓 > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if (!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("판매 주문 수정 오류 !");

}

}

if (CountBuy() == 0 && 묻기 <= PriceLow)

{

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, "TMA 로봇", Magic, 0, Blue);

만약 (티켓 > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*포인트, 자릿수);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if(!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("구매 주문을 수정하는 동안 오류가 발생했습니다!");

} else Print("구매 주문 열기 오류");

}

//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

//--------


//--------

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && 입찰가 >= 높은 가격)

{

티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰, 슬리피지, 0, 0, "TMA 로봇", 매직, 0, 레드);

만약 (티켓 > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if (!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("판매 주문 수정 오류!");

} else Print("판매 주문을 열 때 오류가 발생했습니다!");

}

if (CountBuy() == 0 && 묻기 <= PriceLow)

{

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, "TMA 로봇", Magic, 0, Blue);

만약 (티켓 > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*포인트, 자릿수);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if(!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("구매 주문을 수정하는 동안 오류가 발생했습니다!");

} else Print("구매 주문 열기 오류");

}

if (질문 <= PriceLow && CountSell() > 0)

{

(int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Print("판매 주문 마감 오류!");

}

}

}

if (Bid >= PriceHigh && CountBuy() > 0)

{

(int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Print("구매 주문을 닫는 동안 오류가 발생했습니다!");

}

}

}

}

//+----------------------------------------------- --------------------+

정수 CountSell()

{

정수 개수 = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(주문선택(무역, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

카운트++;

}

}

리턴(카운트);

}//+---------------------------------------------- --------------------+

정수 CountBuy()

{

정수 개수 = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(주문선택(무역, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

카운트++;

}

}

반환(카운트);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

//+-------


//+-------

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- --------------------+

정수 시작()

{

//-----

부울 오류 = 거짓;

if (LBT!=시간[0]) {

if (OrdersTotal()!=0) {

for (int i=0; i<OrdersTotal(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

이중 SL = OrderStopLoss();

주문 유형()==0) {

스위치(트랄타입) {

경우 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

부서지다;

사례 1: SL = 높음[1] - iATR(NULL,0,ATR,기간,1)*ATR_K;

부서지다;

사례 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift,fals,fals,"",1,0,0);

부서지다;

}

if (SL<OrderStopLoss())

SL = 주문 중지 손실();

}

if (주문 유형()==1) {

스위치(트랄타입) {

경우 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

부서지다;

사례 1: SL = 낮음[1] + iATR(NULL,0,ATR,기간,1)*ATR_K;

부서지다;

사례 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift,fals,fals,"",1,0,0);

부서지다;

}

if (SL>OrderStopLoss())

SL = 주문 중지 손실();

}

if (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

오류=참;

}

}

}

}

만약 (!오류)

LBT = 시간[0];

}

반환(0);

}

//+----------------------------------------------- --------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Andrey Luxe :

이 분야에서 경험을 쌓기 위해 당신의 흥미로운 아이디어와 전략에 대해 25명의 조언자를 무료로 쓸 것입니다.

19명의 고문이 남음


Andrey , 알아낼 수 있도록 도와주세요. EA에 후행 중지 기능을 추가하고 컴파일했는데 두 가지 오류가 발생했습니다. - 나는 머리를 부러뜨렸고, 올빼미를 만들기 위해 수리하는 방법을 이해할 수 없습니다. 사실, 가격이 채널의 위쪽 경계선과 아래쪽 경계선에 각각 닿은 후 이전 전략의 조건에 따라 거래가 닫힙니다. 여기서도 뭔가 변화가 필요하다는 것을 이해합니다. - 조선민주주의인민공화국 군대에 대응하라.

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#속성 링크 "https://www.mql5.com"

#속성 버전 "1.00"

#속성엄격


//------------------------------------------------ ----------

extern 이중 로트 = 0.01;

extern int TakeProfit = 600;

extern int 손절매 = 25;

외부 정수 매직 = 0001;

extern int 미끄러짐 = 3;

외부 정수 TralType = 0; // 0-SAR, 1-ATR, 2-HMA

외부 이중 SAR_Step = 0.02;

외부 이중 SAR_Max = 0.2;

외부 정수 ATR_Period = 14;

외부 이중 ATR_K = 2.0;

extern int HMA_Period = 16;

extern int HMA_Method = 3;

외부 정수 HMA_Shift = 0;

날짜/시간 LBT;

//------------------------------------------------ ----------

extern string TMA = "TMA 표시기의 매개변수";

extern string TimeFrame = "현재 시간 프레임";

extern int HalfLength = 56;

extern int 가격 = PRICE_CLOSE;

외부 이중 ATRMultiplier = 2.0;

extern int ATRPPeriod = 100;

extern bool 보간 = true;

//------------------------------------------------ ----------

이중 PriceHigh, PriceLow, SL, TP;

인트 티켓;


//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

int OnInit()

{

if (숫자 == 3 || 숫자 == 5)

{

이익을 취하십시오 *= 10;

손절매 *= 10;

미끄러짐 *= 10;

}

반환(INIT_SUCCESSED);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

무효 OnDeinit(const int 이유)

{


}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && 입찰가 >= 높은 가격)

{

티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰, 슬리피지, 0, 0, "TMA 로봇", 매직, 0, 레드);

만약 (티켓 > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if (!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("판매 주문 수정 오류 !");

}

}

if (CountBuy() == 0 && 묻기 <= PriceLow)

{

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, "TMA 로봇", Magic, 0, Blue);

만약 (티켓 > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*포인트, 자릿수);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if(!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("구매 주문을 수정하는 동안 오류가 발생했습니다!");

} else Print("구매 주문 열기 오류");

}

//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

//--------


//--------

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

PriceHigh = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 1, 0);

PriceLow = iCustom(NULL, 0, "TMA_Fair", TimeFrame, HalfLength, 가격, ATRMultiplier, ATRPPeriod, Interpolate, 2, 0);

if(CountSell() == 0 && 입찰가 >= 높은 가격)

{

티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰, 슬리피지, 0, 0, "TMA 로봇", 매직, 0, 레드);

만약 (티켓 > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if (!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("판매 주문 수정 오류!");

} else Print("판매 주문을 열 때 오류가 발생했습니다!");

}

if (CountBuy() == 0 && 묻기 <= PriceLow)

{

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, "TMA 로봇", Magic, 0, Blue);

만약 (티켓 > 0)

{

TP = NormalizeDouble(Ask + TakeProfit*포인트, 자릿수);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

if (OrderSelect(티켓, SELECT_BY_TICKET))

if(!OrderModify(티켓, OrderOpenPrice(), SL, TP, 0))

Print("구매 주문을 수정하는 동안 오류가 발생했습니다!");

} else Print("구매 주문 열기 오류");

}

if (질문 <= PriceLow && CountSell() > 0)

{

(int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)

if (!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black))

Print("판매 주문 마감 오류!");

}

}

}

if (Bid >= PriceHigh && CountBuy() > 0)

{

(int i = OrdersTotal() -1; i>0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && OrderType() == OP_BUY)

if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black))

Print("구매 주문을 닫는 동안 오류가 발생했습니다!");

}

}

}

}

//+----------------------------------------------- --------------------+

정수 CountSell()

{

정수 개수 = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(주문선택(무역, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

카운트++;

}

}

반환(카운트);

}//+---------------------------------------------- --------------------+

정수 CountBuy()

{

정수 개수 = 0;

for (int trade = OrdersTotal()-1; trade>=0; trade--)

{

if(주문선택(무역, SELECT_BY_POS, MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

카운트++;

}

}

리턴(카운트);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

//+-------


//+-------

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- --------------------+

정수 시작()

{

//-----

부울 오류 = 거짓;

if (LBT!=시간[0]) {

if (OrdersTotal()!=0) {

for (int i=0; i<OrdersTotal(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

이중 SL = OrderStopLoss();

주문 유형()==0) {

스위치(트랄타입) {

경우 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

부서지다;

사례 1: SL = 높음[1] - iATR(NULL,0,ATR,기간,1)*ATR_K;

부서지다;

사례 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift,fals,fals,"",1,0,0);

부서지다;

}

if (SL<OrderStopLoss())

SL = 주문 중지 손실();

}

if (주문 유형()==1) {

스위치(트랄타입) {

경우 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0);

부서지다;

사례 1: SL = 낮음[1] + iATR(NULL,0,ATR,기간,1)*ATR_K;

부서지다;

사례 2: SL = iCustom(NULL,0,"VininI_HMAsound&amp",HMA_Period,HMA_Method,3,HMA_Shift,fals,fals,"",1,0,0);

부서지다;

}

if (SL>OrderStopLoss())

SL = 주문 중지 손실();

}

if (SL!=OrderStopLoss()) {

if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0))

오류=참;

}

}

}

}

만약 (!오류)

LBT = 시간[0];

}

반환(0);

}

//+----------------------------------------------- --------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
vkravtzov :

Andrey , 알아낼 수 있도록 도와주세요. EA에 후행 중지 기능을 추가하고 컴파일했는데 두 가지 오류가 발생했습니다. - 나는 머리를 부러뜨렸고, 올빼미를 만들기 위해 고치는 방법을 이해할 수 없습니다. 사실, 가격이 채널의 위쪽 경계선과 아래쪽 경계선에 각각 닿은 후 이전 전략의 조건에 따라 거래가 닫힙니다. 여기서도 뭔가 변화가 필요하다는 것을 이해합니다. - 조선민주주의인민공화국군 병사들에게 응답하라.


스팸하지 마세요
 
Victor Nikolaev :
스팸하지 마세요

내가 잘못한 것이 있다면 사과드립니다. 사실, 나는 스팸을 어떻게 보냈는지 이해하지 못했습니다 ... 제 생각에는 두 명의 동료에게 두 개의 메시지를 보냈습니다. 아니면 불가능합니까? - 죄책감이 드는.

사유: