차트에 합류할 때 2016.02.11 00:21:02.663 'MoyforNeuro'는 전문가가 아니며 실행할 수 없으며 컴파일러는 오류를 제공하지 않으며 이전에는 모든 것이 잘 작동했지만 새 빌드가 릴리스된 후에는 문제! 그에게 무슨 문제가 있는지 말해주세요. 여기 전문가가 있습니다.
//+------------------------------------------------------------------+//| Excel_Neuro.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property strictinputstring FileName = "OrderEU.txt" ; //- Имя файла в каталоге TerminalPath()+"\experts\files",// с которого будут считываться данные о изменениях в ордерах.inputint MagicStart = 99 ; //- Эксперт удаляет только ордера, магики которыхinputint MagicEnd = 999 ; // входят в указанный здесь интервалinputint Sensitivity = 30 ; //- Чувствительность сигнала в пунктах.//extern double NewRisk = 1.0; //- Коэффициент изменения риска//extern bool LittleLots = true; //- Если true, то при лоте меньше минимальнодопустимого на этом счёте, будет открыт минимальный лотinputint Stoploss = 30 ;
inputint SP = 30 ; //- SleepPage - предельное отклонение от цены//--------------------------------------------------------------------------externdouble Time_shift= 15 ;
//---------------------------------------------------------------------------int OCount= 0 ;
int OMagic[ 1000 ];
string OSymbol[ 1000 ];
double OType[ 1000 ];
double ORisk[ 1000 ];
double OOP[ 1000 ];
double OSL[ 1000 ];
double OTP[ 1000 ];
//---------------------------------------------------------------------------int start() {
//-----------------------------------------------------------------------------------int magic= 0 ;
int _GetLastError = 0 , _OrdersTotal = OrdersTotal ();
//bool ALLRIGHT=true;if (!FileExist(FileName)) return ( 0 );
FileLoad(FileName);
//Удаляем старыеif (CloseAllBeingAbsentPozitions()< 0 ) return ( 0 );
//Корректируем существующиеfor ( int i= 0 ; i<OCount; i++) {
magic=OrderExist( "" ,OMagic[i]);
if (magic> 0 ){
if (OrderMagicNumber()==OMagic[i]){
Print ( "Ордер с таким магиком уже существует" );
FileDelete (FileName);}
}
else
{
//Обрабатываем существующиеfor ( int q= 0 ; q<= OrdersTotal (); q++) {
if ( OrderSelect (q,SELECT_BY_POS, MODE_TRADES)){
Print ( "Выбрал ордер " , OrderMagicNumber(), "Всего ордеров " , OrdersTotal ());
if (OrderType()==OType[i]){
Print ( "Ордер по типу соответствует последнему сигналу" );
MODIFY(OSymbol[i], magic, OSL[i], OTP[i]);
}
elseif (OrderType()!=OType[i]){
Print ( "Удалим ордера другого типа" );
//if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);return(0);}//if(OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);return(0);}
}
}
}
//Открываем новые позиции if (OType[i]==OP_BUY) {
if ( MathAbs (MarketInfo(OSymbol[i],MODE_ASK)-OOP[i])<Sensitivity*MarketInfo(OSymbol[i],MODE_POINT)) {
BUY(OSymbol[i],ORisk[i], OSL[i], OTP[i], OMagic[i]);
Print ( "Удалим файл после открытия БАЙ ордера" );
FileDelete (FileName);
}
}
elseif (OType[i]==OP_SELL) {
if ( MathAbs (MarketInfo(OSymbol[i],MODE_BID)-OOP[i])<Sensitivity*MarketInfo(OSymbol[i],MODE_POINT)) {
SELL(OSymbol[i],ORisk[i], OSL[i], OTP[i], OMagic[i]);
Print ( "Удалим файл после открытия СЕЛЛ ордера" );
FileDelete (FileName);
}
}
}
} //Next ireturn ( 0 );
} //start()//---------------------------------------------------------------------------bool FileExist( string file) {
int handle= FileOpen (file, FILE_BIN );
if (handle< 0 ) {
return ( false );
} else {
FileClose (handle);
return ( true );
}
} //FileExist()//---------------------------------------------------------------------------int FileLoad( string file) {
int i= 0 , j= 0 ; double k= 0 ;
string buffer[ 1000 ];
int handle= FileOpen (file, FILE_BIN );
if (handle< 0 ) {
return (- 1 );
} else {
k= FileReadArray (handle,buffer, 0 , 1000 );
FileClose (handle);
//OCount=0;//while(!StringTrimRight(StringTrimLeft(buffer[OCount]))=="") {for (OCount= 0 ; OCount<k; OCount++) {
i = StringFind (buffer[OCount], " " , 0 );
ORisk[OCount]=StrToDouble( StringSubstr (buffer[OCount], 0 ,i));
j=i+ 1 ;
i = StringFind (buffer[OCount], " " ,j);
OMagic[OCount]=( int )StrToDouble( StringSubstr (buffer[OCount], j,i-j));
j=i+ 1 ;
i = StringFind (buffer[OCount], " " ,j);
OSymbol[OCount]= StringSubstr (buffer[OCount], j,i-j);
j=i+ 1 ;
i = StringFind (buffer[OCount], " " ,j);
OType[OCount]=StrToDouble( StringSubstr (buffer[OCount], j,i-j));
j=i+ 1 ;
i = StringFind (buffer[OCount], " " ,j);
OOP[OCount]=StrToDouble( StringSubstr (buffer[OCount], j,i-j));
j=i+ 1 ;
i = StringFind (buffer[OCount], " " ,j);
OSL[OCount]=StrToDouble( StringSubstr (buffer[OCount], j,i-j));
j=i+ 1 ;
OTP[OCount]=StrToDouble( StringSubstr (buffer[OCount], j, 0 ));
//OCount++;
} //Next OCount
}
return (- 1 );
} //FileLoad()//+------------------------------------------------------------------+int OrderExist( string fSymbol= "" , int fMagic= 0 , int fType=- 1 ) {
int total = OrdersTotal ();
for ( int i = total- 1 ; i >= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol()==fSymbol || fSymbol== "" ) {
if (OrderMagicNumber()==fMagic || fMagic== 0 ) {
if (OrderType()==fType||fType==- 1 ) {
return (OrderTicket());
}
}
} // Если свой
} // Next ireturn (- 1 );
} //OrderExist()//+------------------------------------------------------------------+int CloseAllBeingAbsentPozitions() {
int Cur_Hour=Hour(); // Серверное время в часах//double Cur_Min =Minute(); // Серверное время в минутах//double Cur_time=Cur_Hour; //+ Cur_Min/100; // Текущее времяint LE;
int y,x= 100 ;
double PriceClose= 0 ,z= 0 ;
bool Del;
int total = OrdersTotal ();
for ( int i = total- 1 ; i >= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
while (x< 124 ){
x++;
y= 24 ;
if (x- 101 +Time_shift-y< 0 ){
y= 0 ;
}
else {
y= 24 ;}
z=x- 101 +Time_shift-y;
Print ( "Закрываем ордера, Номер магика X= " ,x- 1 , " Выбрал ордер с магиком " ,OrderMagicNumber(), " Время закрытия " ,z);
if (OrderMagicNumber()==x&&Cur_Hour==z) continue ;
Del= true ;
}
for ( int j= 0 ; j<OCount; j++) {
if (OrderMagicNumber()==OMagic[j]) {
Del= false ;
break ;
}
}
if (Del) {
if (OrderType()> 1 &&OrderType()< 6 )
if (OrderDelete(OrderTicket())== true )
Print ( "Ордер удален" );
else {
LE= 135 ;
while (LE> 134 && LE< 139 ) {
if (OrderType()==OP_BUY) {
PriceClose=MarketInfo(OrderSymbol(),MODE_BID);
} elseif (OrderType()==OP_SELL) {
PriceClose=MarketInfo(OrderSymbol(),MODE_ASK);
}
if (OrderClose(OrderTicket(),OrderLots(),PriceClose,SP))
LE = GetLastError ();
if (LE> 0 ) Print ( "СтаФФка не закрывается по причине ашипки № " ,LE);
}
if (LE> 0 ) return (- 1 );
}
}
}
} // Next ireturn ( 0 );
} //CloseAllPozitions()//+------------------------------------------------------------------+int MODIFY( string mySymbol, int magic, double sl = 0 , double tp = 0 ) {
double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
Print ( "Пытаемся модифицировать" ,OrderMagicNumber());
//for(int i=0; i<OCount; i++) {//for (magic=100; magic <= 123; magic++) {//if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
magic=OrderMagicNumber();
if ( OrderSelect (magic, SELECT_BY_TICKET)) {
double SLo=OrderStopLoss();
double TPo=OrderTakeProfit();
//sl=NormalizeDouble(sl,MarketInfo(mySymbol,MODE_DIGITS));//tp=NormalizeDouble(tp,MarketInfo(mySymbol,MODE_DIGITS));if (OrderType()==OP_BUY) {
Print ( "Проверяем, является ли ордером БАЙ , тип ордера " ,OrderType());
if ( NormalizeDouble (sl, Digits )> NormalizeDouble (SLo, Digits )) {
sl= NormalizeDouble (sl,( int )MarketInfo(mySymbol,MODE_DIGITS));
}
else {
sl= NormalizeDouble (SLo,( int )MarketInfo(mySymbol,MODE_DIGITS));
}
if ( NormalizeDouble (tp, Digits )< NormalizeDouble (TPo, Digits )) {
tp= NormalizeDouble (tp,( int )MarketInfo(mySymbol,MODE_DIGITS));
}
else {
tp= NormalizeDouble (TPo,( int )MarketInfo(mySymbol,MODE_DIGITS));
}
if (sl> 0 ) {
Print ( "Проверяем, есть ли у ордера с/л " ,OrderStopLoss());
if (MarketInfo(mySymbol,MODE_BID)-sl<stoplimit) {
Print ( "Слишком близкий стоп (" ,(MarketInfo(mySymbol,MODE_BID)-sl)/MarketInfo(mySymbol,MODE_POINT), " пунктов). Требуется не менее: " , stoplimit/MarketInfo(mySymbol,MODE_POINT));
return (- 1 );
}
}
if (tp> 0 ) {
Print ( "Проверяем, есть ли у ордера т/п " ,OrderTakeProfit());
if (tp-MarketInfo(mySymbol,MODE_ASK)<stoplimit) {
Print ( "Слишком близкий профит (" ,(tp-MarketInfo(mySymbol,MODE_ASK))/MarketInfo(mySymbol,MODE_POINT), " пунктов). Требуется не менее: " , stoplimit/MarketInfo(mySymbol,MODE_POINT));
return (- 1 );
}
}
} elseif (OrderType()==OP_SELL) {
Print ( "Проверяем, является ли ордером СЕЛЛ , тип ордера " ,OrderType());
if ( NormalizeDouble (sl, Digits )< NormalizeDouble (SLo, Digits )) {
sl= NormalizeDouble (sl,( int )MarketInfo(mySymbol,MODE_DIGITS));
}
else {
sl= NormalizeDouble (SLo,( int )MarketInfo(mySymbol,MODE_DIGITS));
}
if ( NormalizeDouble (tp, Digits )> NormalizeDouble (TPo, Digits )) {
tp= NormalizeDouble (tp,( int )MarketInfo(mySymbol,MODE_DIGITS));
}
else {
tp= NormalizeDouble (TPo,( int )MarketInfo(mySymbol,MODE_DIGITS));
}
if (sl> 0 ) {
if (sl-MarketInfo(mySymbol,MODE_ASK)<stoplimit) {
Print ( "Слишком близкий стоп (" ,(sl-MarketInfo(mySymbol,MODE_ASK))/MarketInfo(mySymbol,MODE_POINT), " пунктов). Требуется не менее: " , stoplimit/MarketInfo(mySymbol,MODE_POINT));
return (- 1 );
}
}
if (tp> 0 ) {
if (MarketInfo(mySymbol,MODE_BID)-tp<stoplimit) {
Print ( "Слишком близкий профит (" ,(MarketInfo(mySymbol,MODE_BID)-tp)/MarketInfo(mySymbol,MODE_POINT), " пунктов). Требуется не менее: " , stoplimit/MarketInfo(mySymbol,MODE_POINT));
return (- 1 );
}
}
}
if (DoubleToStr(OrderStopLoss(),( int )MarketInfo(mySymbol,MODE_DIGITS))==DoubleToStr(sl,( int )MarketInfo(mySymbol,MODE_DIGITS)) &&
DoubleToStr(OrderTakeProfit(),( int )MarketInfo(mySymbol,MODE_DIGITS))==DoubleToStr(tp,( int )MarketInfo(mySymbol,MODE_DIGITS))) return ( 0 );
if (OrderModify(magic,OrderOpenPrice(), sl, tp, 0 )==FALSE) {
Print ( "Ошибка OrderModify(): " , GetLastError ());
return (- 1 );
}
}
return ( 0 );
} //Modify()//+------------------------------------------------------------------+int BUY( string mySymbol= "" , double lt= 0 , double sl= 0 , double tp= 0 , int mn= 0 ) {
if (mySymbol== "" ) mySymbol= Symbol ();
double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
int magic = - 1 ; //покупаем по цене Askint LE= 135 ;
mn=( int ) NormalizeDouble (mn,( int )MarketInfo(mySymbol,MODE_DIGITS));
if (lt<MarketInfo(mySymbol, MODE_MINLOT)) return ( 0 );
if (lt>MarketInfo(mySymbol, MODE_MAXLOT)) lt=MarketInfo(mySymbol, MODE_MAXLOT);
if (lt>AccountFreeMargin()* 0.90 /MarketInfo(mySymbol,MODE_MARGINREQUIRED)) lt=AccountFreeMargin()* 0.90 /MarketInfo(mySymbol,MODE_MARGINREQUIRED);
lt = NormalizeDouble (lt, ( int ) MathAbs ( MathLog (MarketInfo(mySymbol, MODE_LOTSTEP))/ MathLog ( 10.0 )));
if (sl> 0 ) {
sl= NormalizeDouble (sl,( int )MarketInfo(mySymbol,MODE_DIGITS));
if (MarketInfo(mySymbol,MODE_BID)-sl<stoplimit) sl=MarketInfo(mySymbol,MODE_BID)-stoplimit;
}
if (tp> 0 ) {
tp= NormalizeDouble (tp,( int )MarketInfo(mySymbol,MODE_DIGITS));
if (tp-MarketInfo(mySymbol,MODE_ASK)<stoplimit) tp=MarketInfo(mySymbol,MODE_ASK)+stoplimit;
}
while (LE> 134 && LE< 139 ) {
magic = OrderSend (mySymbol, OP_BUY, lt, MarketInfo(mySymbol,MODE_ASK), SP, sl, tp, WindowExpertName(), mn, 0 , Blue);
LE = GetLastError ();
Sleep ( 2000 );
RefreshRates();
}
if (magic > 0 ) Sleep ( 10000 );
return (magic);
} //BUY()//+------------------------------------------------------------------+int SELL( string mySymbol= "" , double lt= 0 , double sl= 0 , double tp= 0 , double mn= 0 ) {
if (mySymbol== "" ) mySymbol= Symbol ();
double stoplimit=MarketInfo(mySymbol, MODE_STOPLEVEL)*MarketInfo(mySymbol,MODE_POINT);
int magic = - 1 ; //продаём по цене Bidint LE= 135 ;
mn= NormalizeDouble (mn,( int )MarketInfo(mySymbol,MODE_DIGITS));
if (lt<MarketInfo(mySymbol, MODE_MINLOT)) return ( 0 );
if (lt>MarketInfo(mySymbol, MODE_MAXLOT)) lt=MarketInfo(mySymbol, MODE_MAXLOT);
if (lt>AccountFreeMargin()* 0.90 /MarketInfo(mySymbol,MODE_MARGINREQUIRED)) lt=AccountFreeMargin()* 0.90 /MarketInfo(mySymbol,MODE_MARGINREQUIRED);
lt = NormalizeDouble (lt, ( int ) MathAbs ( MathLog (MarketInfo(mySymbol, MODE_LOTSTEP))/ MathLog ( 10.0 )));
if (sl> 0 ) {
sl= NormalizeDouble (sl,( int )MarketInfo(mySymbol,MODE_DIGITS));
if (sl-MarketInfo(mySymbol,MODE_ASK)<stoplimit) sl=MarketInfo(mySymbol,MODE_ASK)+stoplimit;
}
if (tp> 0 ) {
tp= NormalizeDouble (tp,( int )MarketInfo(mySymbol,MODE_DIGITS));
if (MarketInfo(mySymbol,MODE_BID)-tp<stoplimit) tp=MarketInfo(mySymbol,MODE_BID)-stoplimit;
}
while (LE> 134 && LE< 139 ) {
magic = OrderSend (mySymbol, OP_SELL, lt, MarketInfo(mySymbol,MODE_BID), SP, sl, tp, WindowExpertName(), ( int )mn, 0 , Red);
LE = GetLastError ();
Sleep ( 2000 );
RefreshRates();
}
if (magic > 0 ) Sleep ( 10000 );
return (magic);
} //SELL()//+------------------------------------------------------------------+
이 사실을 놓쳤다. 죄송합니다
아마도 우리가 그것을 고칠 것입니다. 타이밍에 대해서는 말씀드리기 어렵습니다.
당신의 행동을 호전적 무지라고 합니다.
무의미한 글은 이제 그만하고 포럼 회원들을 모욕하지 마세요.
덕. 시간대에 대해 물어보니 전역 수준에서 함수로 변수를 초기화하는 기능을 취소할 필요는 없다는 의견을 피력했다.
내 프로그램의 사용자 중 한 명이 테스터에서 프로그램을 시작하는 데 문제가 있는 스크린샷을 보냈습니다.
그것은 무엇이 될 수 있으며 다음에 무엇을 할 수 있습니까?
내 프로그램의 사용자 중 한 명이 테스터에서 프로그램을 시작하는 데 문제가 있는 스크린샷을 보냈습니다.
그것은 무엇이 될 수 있으며 다음에 무엇을 할 수 있습니까?
내 프로그램의 사용자 중 한 명이 테스터에서 프로그램을 시작하는 데 문제가 있는 스크린샷을 보냈습니다.
그것은 무엇이 될 수 있으며 다음에 무엇을 할 수 있습니까?
내 프로그램의 사용자 중 한 명이 테스터에서 프로그램을 시작하는 데 문제가 있는 스크린샷을 보냈습니다.
그것은 무엇이 될 수 있으며 다음에 무엇을 할 수 있습니까?
iHigh(....) / iLow(...) 함수가 Bid 값을 반환하는지 확인하고 싶습니다.
네. 차트는 입찰 가격을 기반으로 합니다.
오 글쎄 :))))
차트에 합류할 때 2016.02.11 00:21:02.663 'MoyforNeuro'는 전문가가 아니며 실행할 수 없으며 컴파일러는 오류를 제공하지 않으며 이전에는 모든 것이 잘 작동했지만 새 빌드가 릴리스된 후에는 문제! 그에게 무슨 문제가 있는지 말해주세요. 여기 전문가가 있습니다.