//+------------------------------------------------------------------+//| MACD Sample.mq4 |//| Copyright 2005-2014, MetaQuotes Software Corp. |//| http://www.mql4.com |//+------------------------------------------------------------------+#property copyright"2005-2014, MetaQuotes Software Corp."#property link" http://www.mql4.com "inputdouble TakeProfit = 2190 ;
inputdouble Lots = 0.5 ;
inputdouble TrailingStop = 650 ;
inputint OpenLevel = 70 ;
inputint CloseLevel= 23 ;
inputintPeriod = 86 ;
inputint Period1 = 87 ;
int LastBars= 0 ;
externint Magic1 = 110721 ;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTick ( void )
{
int cnt,ticket,total;
//---// initial data checks// it is important to make sure that the expert works with a normal// chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit// on a chart of less than 100 bars//---//--- Trade only if new bar has arrivedif (LastBars!= Bars ) LastBars= Bars ;
elsereturn ( 0 );
if ( Bars < 100 )
{
Print ( "bars less than 100" );
return ;
}
if (TakeProfit< 10 )
{
Print ( "TakeProfit less than 10" );
return ;
}
//--- to simplify the coding and speed up access data are put into internal variablesif (CountOrders( "" , - 1 ,Magic1)< 1 )
total= OrdersTotal ();
if (total< 1 )
{
//--- no opened orders identifiedif (AccountFreeMargin()<( 1000 *Lots))
{
Print ( "We have no money. Free Margin = " ,AccountFreeMargin());
return ;
}
//--- check for long position (BUY) possibilityif ( iRSI ( NULL , 0 ,OpenLevel, PRICE_LOW , Period )> iRSI ( NULL , 0 ,CloseLevel, PRICE_HIGH ,Period1))
{
ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid-TakeProfit* Point ,Bid+TakeProfit* Point , "GBPCADD" ,Magic1, 0 ,Green);
if (ticket> 0 )
{
if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
Print ( "BUY order opened : " ,OrderOpenPrice());
}
elsePrint ( "Error opening BUY order : " , GetLastError ());
return ;
}
//--- check for short position (SELL) possibilityif ( iRSI ( NULL , 0 ,OpenLevel, PRICE_LOW ,Period1)< iRSI ( NULL , 0 ,CloseLevel, PRICE_HIGH , Period ))
{
ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+TakeProfit* Point ,Ask-TakeProfit* Point , "GBPCADD" ,Magic1, 0 ,Red);
if (ticket> 0 )
{
if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES))
Print ( "SELL order opened : " ,OrderOpenPrice());
}
elsePrint ( "Error opening SELL order : " , GetLastError ());
}
//--- exit from the "no opened orders" blockreturn ;
}
//--- it is important to enter the market correctly, but it is more important to exit it correctly... for (cnt= 0 ;cnt<total;cnt++)
{
if (! OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES))
continue ;
if (OrderType()<=OP_SELL && // check for opened position
OrderSymbol()== Symbol ()&& OrderMagicNumber()==Magic1) // check for symbol
{
//--- long position is openedif (OrderType()==OP_BUY)
{
//--- should it be closed?if ( iRSI ( NULL , 0 ,OpenLevel, PRICE_LOW ,Period1)< iRSI ( NULL , 0 ,CloseLevel, PRICE_HIGH , Period ))
{
//--- close order and exitif (!OrderClose(OrderTicket(),OrderLots(),Bid, 3 ,Violet))
Print ( "OrderClose error " , GetLastError ());
return ;
}
//--- check for trailing stopif (TrailingStop> 0 )
{
if (Bid-OrderOpenPrice()> Point *TrailingStop)
{
if (OrderStopLoss()<Bid- Point *TrailingStop)
{
//--- modify order and exitif (!OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point *TrailingStop,OrderTakeProfit(), 0 ,Green))
Print ( "OrderModify error " , GetLastError ());
return ;
}
}
}
}
else// go to short position
{
//--- should it be closed?if ( iRSI ( NULL , 0 ,OpenLevel, PRICE_LOW , Period )> iRSI ( NULL , 0 ,CloseLevel, PRICE_HIGH ,Period1))
{
//--- close order and exitif (!OrderClose(OrderTicket(),OrderLots(),Ask, 3 ,Violet))
Print ( "OrderClose error " , GetLastError ());
return ;
}
//--- check for trailing stopif (TrailingStop> 0 )
{
if ((OrderOpenPrice()-Ask)>( Point *TrailingStop))
{
if ((OrderStopLoss()>(Ask+ Point *TrailingStop)) || (OrderStopLoss()== 0 ))
{
//--- modify order and exitif (!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Point *TrailingStop,OrderTakeProfit(), 0 ,Red))
Print ( "OrderModify error " , GetLastError ());
return ;
}
}
}
}
}
}
//---
}
//+------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Подсчет ордеров |//+----------------------------------------------------------------------------+//| -1 - Все типы ордеров |//| 0 - ордера типа BUY |//| 1 - ордера типа SELL |//| 2 - ордера типа BUYLIMIT |//| 3 - ордера типа SELLLIMIT |//| 4 - ордера типа BUYSTOP |//| 5 - ордера типа SELLSTOP |//+----------------------------------------------------------------------------+int CountOrders( string symb= "" , int or_ty=- 1 , int magiс=- 1 )
{
int cnt= 0 ;
if (symb== "0" ) symb= _Symbol ;
for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
{
if ( OrderSelect (pos,SELECT_BY_POS)== true )
{
if ((OrderSymbol()==symb || symb== "" )&&(or_ty< 0 || or_ty==OrderType()))
{
if (magiс< 0 || OrderMagicNumber()==magiс) cnt++;
}
}
}
return (cnt);
}
//--- to simplify the coding and speed up access data are put into internal variablesif (CountOrders( "" , - 1 ,Magic1)< 1 )
total= OrdersTotal ();if (total< 1 )
Включение файлов (#include) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
그럼 맞겠죠?
그럼 맞을까요?
감사합니다. 어려운 옵션입니다. 몇 줄로 모든 것을 더 간단하게 만들었습니다.
감사합니다 어려운 선택입니다 몇 줄만 더 간단하게 만들었습니다.
당신이 신경 쓰지 않는지 확인하는 것이 흥미 롭습니다.
for(i=k; i>=0; i--) {
if( 주문선택 (i,SELECT_BY_POS, MODE_TRADES )) {
if(OrderSymbol()==Symbol()) {
if(OrderMagicNumber() == 매직) {
if(OrderType()>1) 계속;
if(OrderType()==OP_BUY || OrderType()==OP_SELL) 총++;
}}}}
//---
// 총계=OrdersTotal();
if(총<1)
{
안녕하세요! 로봇에서 동일한 기능을 자주 사용하기 때문에 저만의 기능 라이브러리를 만들고 싶었습니다. 모든 것이 제대로 된 것처럼 보였습니다. 라이브러리를 만들어 Libraries 폴더에 넣고 #import를 통해 표시기의 라이브러리를 연결했습니다.
# "andylib.ex4" 가져오기
bool KeyPr(긴 l, 문자열 k);
문자열 TestFunc();
#수입
설명과 함께 라이브러리의 지정된 기능. 그러나 라이브러리의 함수는 호출되지 않습니다. 지표 폴더에 성경을 던지려고 했고, 성경과 소통하는 지표가 있는 곳으로 직접 가도 아무런 성과가 없었습니다. 무엇이 잘못될 수 있습니까?
안녕하세요! 로봇에서 동일한 기능을 자주 사용하기 때문에 저만의 기능 라이브러리를 만들고 싶었습니다. 모든 것이 제대로 된 것처럼 보였습니다. 라이브러리를 만들어 Libraries 폴더에 넣고 #import를 통해 표시기의 라이브러리를 연결했습니다.
# "andylib.ex4" 가져오기
bool KeyPr(긴 l, 문자열 k);
문자열 TestFunc();
#수입
설명과 함께 라이브러리의 지정된 기능. 그러나 라이브러리의 함수는 호출되지 않습니다. 지표 폴더에 성경을 던지려고 했고, 성경과 소통하는 지표가 있는 곳으로 직접 가도 아무런 성과가 없었습니다. 무엇이 잘못될 수 있습니까?
포함하다
for(i=k; i>=0; i--) {
if( 주문선택 (i,SELECT_BY_POS, MODE_TRADES )) {
if(OrderSymbol()==Symbol()) {
if(OrderMagicNumber() == 매직) {
if(OrderType()>1) 계속;
if(OrderType()==OP_BUY || OrderType()==OP_SELL) 총++;
}}}}
//---
// 총계=OrdersTotal();
if(총<1)
{
작성한 내용이 작동하지 않을 수 있습니다.
먼저 "total++"을 계산한 다음 0으로 재설정하고 "OrdersTotal()" 값을 설정합니다. 모든 주문
안녕하세요! 로봇에서 동일한 기능을 자주 사용하기 때문에 저만의 기능 라이브러리를 만들고 싶었습니다. 모든 것이 제대로 된 것처럼 보였습니다. 라이브러리를 만들어 Libraries 폴더에 넣고 #import를 통해 표시기의 라이브러리를 연결했습니다.
# "andylib.ex4" 가져오기
bool KeyPr(긴 l, 문자열 k);
문자열 TestFunc();
#수입
설명과 함께 라이브러리의 지정된 기능. 그러나 라이브러리의 함수는 호출되지 않습니다. 지표 폴더에 성경을 던지려고 했고, 성경과 소통하는 지표가 있는 곳으로 직접 가도 아무런 성과가 없었습니다. 무엇이 잘못될 수 있습니까?
라이브러리에서 함수명 뒤에 export 쓰는 것을 잊었나요?
그리고 라이브러리가 아닌 .mqh 파일을 만들어 클래스 없이도 함수를 집어넣고 컴파일하는 동안 EA/indicator에서 액세스할 수 있는 필요한 것만 가져오는 것이 좋습니다.