경비원!!! 돕다. 4시간 45분 남았습니다!

 

누가 도울 수 있습니까? 오류가 어디에 있는지 모르겠습니다. 테스트를 통과하지 못합니다.

코드:

//+----------------------------------------------- --------------------+
//| Cempionat2012.mq5 |
//| 빅터 파블류크 |
//| |
//+----------------------------------------------- --------------------+
#property copyright "Victor Pavljuk"
#속성 버전 "1.03"

입력 int TakeProfit=538;
입력 int StopLoss=1000;
입력 int TradeTime=13;
입력 정수 t1=7;
입력 정수 t2=1;
입력 정수 델타 = 70;
입력 더블 로트=5;

bool cantrade=참;
이중 질문;
이중 입찰;
int OpenLong(이중 볼륨=5,
정수 미끄러짐 = 10000,
문자열 주석="",
정수 마법 = 888)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;

my_trade.action=TRADE_ACTION_DEAL;
my_trade.symbol=심볼();
my_trade.volume=NormalizeDouble(볼륨,1);
my_trade.price=NormalizeDouble(Ask,_Digits);
my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits);
my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
my_trade.deviation=미끄러짐;
my_trade.type=ORDER_TYPE_BUY;
my_trade.type_filling=ORDER_FILLING_RETURN;
my_trade.comment=댓글;
my_trade.magic=마법;

재설정 마지막 오류();

if(OrderSend(my_trade,my_trade_result))
{
Print("작업 결과 코드 - ",my_trade_result.retcode);
}
또 다른
{
Print("작업 결과 코드 - ",my_trade_result.retcode);
Print("주문 열기 오류 = ",GetLastError());
}
리턴(0);
}
int OpenShort(이중 볼륨=5,
정수 미끄러짐 = 10000,
문자열 주석="",
정수 마법 = 888)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;

my_trade.action=TRADE_ACTION_DEAL;
my_trade.symbol=심볼();
my_trade.volume=NormalizeDouble(볼륨,1);
my_trade.price=NormalizeDouble(Ask,_Digits);
my_trade.sl=NormalizeDouble(Ask-StopLoss*_Point,_Digits);
my_trade.tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
my_trade.deviation=미끄러짐;
my_trade.type=ORDER_TYPE_SELL;
my_trade.type_filling=ORDER_FILLING_RETURN;
my_trade.comment=댓글;
my_trade.magic=마법;

재설정 마지막 오류();

if(OrderSend(my_trade,my_trade_result))
{
Print("작업 결과 코드 - ",my_trade_result.retcode);
}
또 다른
{
Print("작업 결과 코드 - ",my_trade_result.retcode);
Print("주문 열기 오류 = ",GetLastError());
}
리턴(0);
}
int OnInit()
{
리턴(0);
}
무효 OnDeinit(const int 이유){}
무효 OnTick()
{
이중 열기[];
MqlDateTime mqldt;
시간 현재(mqldt);
의도;
MqlTick last_tick;
SymbolInfoTick(_Symbol,last_tick);
묻다=last_tick.ask;
입찰가=last_tick.bid;

ArraySetAsSeries(열기, 참);

if(t1>=t2)len=t1+1;
그렇지 않으면 len=t2+1;

CopyOpen(_Symbol,PERIOD_M30,0,len,Open);

if(((mqldt.hour)>TradeTime)) cantrade=true;

if(!PositionSelect(_Symbol))// 아직 열린 포지션이 없는 경우
{
if((mqldt.hour==TradeTime) && (캔트레이드))
{
if(열기[t1]>(열기[t2]+delta*_Point))
{
OpenShort(lot,10,"",888);
캔트레이드=거짓;
반품;

}

if((열기[t1]+delta*_Point)<열기[t2])
{
OpenLong(lot,10,"",888);
캔트레이드=거짓;
반품;
}

}
}
반품;
}
//+----------------------------------------------- --------------------+

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - Документация по MQL5
파일:
 

사용하기 전에 MqlTradeRequest 의 구조 를 0으로 설정해야 합니다.


 
YYY, 얼마나 많은 사람들이 이 스레드의 주제와 일치하는 문구를 머리 속에 가지고 있는지 궁금합니다. :)
 
//+------------------------------------------------------------------+
//| Cempionat2012.mq5 |
//| Victor Pavlyuk |
//| |
//+------------------------------------------------------------------+
#property copyright "Victor Pavljuk"
#property version "1.03"

input int TakeProfit= 538 ;
input int StopLoss= 1000 ;
input int TradeTime= 13 ;
input int t1= 7 ;
input int t2= 1 ;
input int delta= 70 ;
input double lot= 5 ;

bool cantrade= true ; 
double Ask; 
double Bid; 
int OpenLong( double volume= 5 ,
int slippage= 10000 ,
string comment= "" ,
int magic= 888 )
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;

my_trade.action= TRADE_ACTION_DEAL ;
my_trade.symbol= Symbol ();
my_trade.volume= NormalizeDouble (volume, 1 );
my_trade.price= NormalizeDouble (Ask, _Digits );
my_trade.sl= NormalizeDouble (Ask-StopLoss* _Point , _Digits );
my_trade.tp= NormalizeDouble (Ask+TakeProfit* _Point , _Digits );
my_trade.deviation=slippage;
my_trade.type= ORDER_TYPE_BUY ;
my_trade.type_filling= ORDER_FILLING_RETURN ;
my_trade.comment=comment;
my_trade.magic=magic;

ResetLastError ();

if ( OrderSend (my_trade,my_trade_result))
{
Print ( "Код результата операции - " ,my_trade_result.retcode);
}
else
{
Print ( "Код результата операции - " ,my_trade_result.retcode);
Print ( "Ошибка открытия ордера = " , GetLastError ());
}
return ( 0 );
}
int OpenShort( double volume= 5 ,
int slippage= 10000 ,
string comment= "" ,
int magic= 888 )
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;

my_trade.action= TRADE_ACTION_DEAL ;
my_trade.symbol= Symbol ();
my_trade.volume= NormalizeDouble (volume, 1 );
my_trade.price= NormalizeDouble (Ask, _Digits );
my_trade.sl= NormalizeDouble (Ask-StopLoss* _Point , _Digits );
my_trade.tp= NormalizeDouble (Ask+TakeProfit* _Point , _Digits );
my_trade.deviation=slippage;
my_trade.type= ORDER_TYPE_SELL ;
my_trade.type_filling= ORDER_FILLING_RETURN ;
my_trade.comment=comment;
my_trade.magic=magic;

ResetLastError ();

if ( OrderSend (my_trade,my_trade_result))
{
Print ( "Код результата операции - " ,my_trade_result.retcode);
}
else
{
Print ( "Код результата операции - " ,my_trade_result.retcode);
Print ( "Ошибка открытия ордера = " , GetLastError ());
}
return ( 0 );
}
int OnInit ()
{
return ( 0 );
}
void OnDeinit ( const int reason){}
void OnTick ()
{
double Open[];
MqlDateTime mqldt;
TimeCurrent (mqldt);
int len;
MqlTick last_tick;
SymbolInfoTick ( _Symbol ,last_tick);
Ask=last_tick.ask;
Bid=last_tick.bid;

ArraySetAsSeries (Open, true );

if (t1>=t2)len=t1+ 1 ;
else len=t2+ 1 ;

CopyOpen ( _Symbol , PERIOD_M30 , 0 ,len,Open);

if (((mqldt.hour)>TradeTime)) cantrade= true ;

if (! PositionSelect ( _Symbol )) // Если еще нет открытой позиции
{
if ((mqldt.hour==TradeTime) && (cantrade))
{
if (Open[t1]>(Open[t2]+delta* _Point ))
{
OpenShort(lot, 10 , "" , 888 );
cantrade= false ;
return ;

}

if ((Open[t1]+delta* _Point )<Open[t2])
{
OpenLong(lot, 10 , "" , 888 );
cantrade= false ;
return ;
}

}
}
return ;
}
//+------------------------------------------------------------------+
우선 명확하게 하기 위해
 

내 생각에 이것은 TP와 SL이 Ask와 같은 이유 에 대한 질문이 있는 코드입니다.

다른 작가가 있을 뿐입니다.

임호.

 

함수 외부로 구조를 이동할 수 있습니다.

아니면 미끄러짐이 너무 커서 왜 그렇게 넣어?

추가 괄호 쌍이 있는 이유는 무엇입니까?

if(((mqldt.hour)>TradeTime))

 

다음과 같이 open 함수를 다시 작성할 수 있습니다.

 void PosOpen( int trade, string symbol)
  { if (trade== 0 )
   return ;
   
   double Price;
   ENUM_ORDER_TYPE Type;
   
   if (trade== 1 )
    {Type= ORDER_TYPE_BUY ;
     Price= SymbolInfoDouble (symbol, SYMBOL_ASK );}
   else 
    {Type = ORDER_TYPE_SELL ;
     Price= SymbolInfoDouble (symbol, SYMBOL_BID );}
     
   mytrade.PositionOpen(symbol,Type,Lot,Price, 0 , 0 , "Open" );    
 return ;
 }    
 
Heroix :

다음과 같이 open 함수를 다시 작성할 수 있습니다.

그런 다음 최소한 어떤 라이브러리에서 기능을 가져왔는지 표시하십시오.

 

테스트하는 동안 로그에 메시지를 생성합니다.

2012.09.21 20:07:11 코어 1 2012.09.18 13:00:00 인스턴트 판매 실패 5.00 EURUSD at 1.30657 sl: 1.29657 tp: 1.31195 [잘못된 요청]

 
pavivas :

테스트하는 동안 로그에 메시지를 생성합니다.

2012.09.21 20:07:11 코어 1 2012.09.18 13:00:00 인스턴트 판매 실패 5.00 EURUSD at 1.30657 sl: 1.29657 tp: 1.31195 [잘못된 요청]

시작했어야 하는 곳입니다.
 
Vladon :

그런 다음 최소한 어떤 라이브러리에서 기능을 가져왔는지 표시하십시오.

#include <Trade\Trade.mqh>

그건 그렇고 기본적으로 터미널 폴더 에 있습니까? 챔프의 고문에게 적용할 필요는 없었나?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - Документация по MQL5