포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 758 1...751752753754755756757758759760761762763764765...1178 새 코멘트 Artyom Trishkin 2014.10.30 05:25 #7571 Ozero : 페레즈 ";" 브래킷용. 프로그램은 작동하지만 주기적으로 오류 4108에서 맹세합니다. 호수. 도움말을 열고 런타임 오류 를 보면 다음이 표시됩니다. 4108 ERR_INVALID_TICKET 잘못된 티켓 번호 우리는 우리가 찾고 있다고 생각합니다 ... MegaHunter 2014.10.30 05:26 #7572 사람들이 도움이됩니다. 구별하고 구별하기 위해 각 통화를 자체 주문으로 거래해야합니다. + 오픈 주문 후 가격이 더 롤백되면 첫 번째 주문과 동일한 다른 주문을 열 수 있습니다. //+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ extern double TakeProfit = 50 ; extern double Lots = 0.1 ; extern double TrailingStop = 30 ; extern double MACDOpenLevel= 3 ; extern double MACDCloseLevel= 2 ; extern double MATrendPeriod= 26 ; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt= 0 , ticket, total; // первичные проверки данных // важно удостовериться что эксперт работает на нормальном графике и // пользователь правильно выставил внешние переменные (Lots, StopLoss, // TakeProfit, TrailingStop) // в нашем случае проверяем только TakeProfit if ( Bars < 100 ) { Print ( "bars less than 100" ); return ( 0 ); } if (TakeProfit< 10 ) { Print ( "TakeProfit less than 10" ); return ( 0 ); // проверяем TakeProfit } // ради упрощения и ускорения кода, сохраним необходимые // данные индикаторов во временных переменных MacdCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 ); MacdPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 1 ); SignalCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 0 ); SignalPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 1 ); MaCurrent= iMA ( NULL , 0 ,MATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE , 0 ); MaPrevious= iMA ( NULL , 0 ,MATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE , 1 ); total= OrdersTotal (); if (total< 1 ) { // нет ни одного открытого ордера if (AccountFreeMargin()<( 1000 *Lots)) { Print ( "We have no money. Free Margin = " , AccountFreeMargin()); return ( 0 ); } // проверяем на возможность встать в длинную позицию (BUY) if (MacdCurrent< 0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs (MacdCurrent)>(MACDOpenLevel* Point ) && MaCurrent>MaPrevious) { ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 , 0 ,Ask+TakeProfit* Point , "macd sample" , 16384 , 0 ,Green); if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "BUY order opened : " ,OrderOpenPrice()); } else Print ( "Error opening BUY order : " , GetLastError ()); return ( 0 ); } // проверяем на возможность встать в короткую позицию (SELL) if (MacdCurrent> 0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDOpenLevel* Point ) && MaCurrent<MaPrevious) { ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 , 0 ,Bid-TakeProfit* Point , "macd sample" , 16384 , 0 ,Red); if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "SELL order opened : " ,OrderOpenPrice()); } else Print ( "Error opening SELL order : " , GetLastError ()); return ( 0 ); } return ( 0 ); } // переходим к важной части эксперта - контролю открытых позиций // 'важно правильно войти в рынок, но выйти - еще важнее...' for (cnt= 0 ;cnt<total;cnt++) { OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES); if (OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL OrderSymbol()== Symbol ()) // инструмент совпадает? { if (OrderType()==OP_BUY) // открыта длинная позиция { // проверим, может уже пора закрываться? if (MacdCurrent> 0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDCloseLevel* Point )) { OrderClose(OrderTicket(),OrderLots(),Bid, 3 ,Violet); // закрываем позицию return ( 0 ); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if (TrailingStop> 0 ) { if (Bid-OrderOpenPrice()> Point *TrailingStop) { if (OrderStopLoss()<Bid- Point *TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point *TrailingStop, OrderTakeProfit(), 0 ,Green); return ( 0 ); } } } } else // иначе это короткая позиция { // проверим, может уже пора закрываться? if (MacdCurrent< 0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious && MathAbs (MacdCurrent)>(MACDCloseLevel* Point )) { OrderClose(OrderTicket(),OrderLots(),Ask, 3 ,Violet); // закрываем позицию return ( 0 ); // выходим } // проверим - может можно/нужно уже трейлинг стоп ставить? if (TrailingStop> 0 ) { if ((OrderOpenPrice()-Ask)>( Point *TrailingStop)) { if ((OrderStopLoss()>(Ask+ Point *TrailingStop)) || (OrderStopLoss()== 0 )) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Point *TrailingStop, OrderTakeProfit(), 0 ,Red); return ( 0 ); } } } } } } return ( 0 ); } // конец. Alexey Kravchenko 2014.10.30 05:33 #7573 안녕하세요 ! 방금 NormalizeDouble 의 이상한 작업을 알아차렸습니다. 즉, 어드바이저는 잘 작동하고 오류가 발생하지 않지만 테스터의 로그는 매우 이상합니다. 설명하겠습니다. 나는 이익 함수를 계산합니다. 나는 예상대로 NormalizeDouble(Profit,Digits); 다음 인쇄(" 이익=",DoubleToStrMorePrecision(Profit,8)); 결과적으로 로그에 "profit=0.88881912"가 표시됩니다. 이론상으로는 0.88881000 이어야 겠죠? 아니면 내가 바보이고 뭔가 잘못하고 있습니까? Artyom Trishkin 2014.10.30 05:36 #7574 goodearth : 안녕하세요 ! 방금 NormalizeDouble의 이상한 작업을 발견했습니다. 즉, 어드바이저는 잘 작동하고 오류가 발생하지 않지만 테스터의 로그는 매우 이상합니다. 설명하겠습니다. 나는 이익 함수를 계산합니다. 나는 예상대로 NormalizeDouble(Profit,Digits); 다음 인쇄(" 이익=",DoubleToStrMorePrecision(Profit,8)); 결과적으로 로그에 "profit=0.88881912"가 표시됩니다. 이론상으로는 0.88881000 이어야 겠죠? 아니면 내가 바보이고 뭔가 잘못하고 있습니까? 거래 주문 과 관련된 이익 가치가 있습니까? Alexey Kravchenko 2014.10.30 05:43 #7575 artmedia70 : 거래 주문과 관련된 이익 가치가 있습니까? 그렇지. 그리고 오류 없이 :-). 그래서 놀랐습니다. 빌드 735가 있습니다. 거래가 데모에 있습니다. 아아아아아 알았어요! 할당 작업 을 잊어 버렸습니다 :-). "Profit=NormalizeDouble(Profit,Digits)". 고문이 오류를 제공하지 않는 이유는 여전히 진실이 분명하지 않습니다.)) 아마도 서버에서 자동으로 반올림됩니다 ..... 어떤 이유에서인지 NormalizeDouble은 함수가 아닌 절차인 것 같습니다 :-). Boris 2014.10.30 06:17 #7576 Ozero : 페레즈 ";" 브래킷용. 프로그램은 작동하지만 주기적으로 오류 4108에서 맹세합니다. 호수. 사실, 당신은 그것을 제거해야합니다! Artyom Trishkin 2014.10.30 06:35 #7577 borilunad : 사실, 당신은 그것을 제거해야합니다! 보리스, 그에게 코드를 직접 보여 주면 더 좋을 것입니다. 그렇지 않으면 수면 부족으로 잊어 버렸습니다 ...;) ResetLastError (); if (!OrderClose(OrderTicket(),OrderLots(),_Bid, 15 )) Print ( "Чё-та не закрылася позиция. Фигня вот такая происходит: " + GetLastError ()); Boris 2014.10.30 07:05 #7578 artmedia70 : 보리스, 그에게 코드를 직접 보여 주면 더 좋을 것입니다. 그렇지 않으면 수면 부족으로 잊어 버렸습니다 ...;) 귀하의 저작권을 남용하려는 것은 아닙니다! ;) 하지만 진지하게, 뭔가가 삽입되지 않았습니다! 하지만 이제 시도하겠습니다! ResetLastError (); if (!OrderClose(OrderTicket(),OrderLots(),_Bid, 15 )) Print (""); 이제 작동했습니다! 기이한! visnu 2014.10.30 11:35 #7579 여보세요 해결책을 알려주세요. 에디터의 500번째 빌드로 에러 없이 컴파일해주는 어드바이저가 있습니다. 그러나 새 버전에서는 오류가 발생합니다. 다음과 같이: bool TP?= true ; // ошибка '?' - semicolon expected 그러나 이것에 대해 이미 두 번 if (TP?) // ')' - unexpected token // ')' - ':' colon sign expected 새 버전과 이전 버전의 설명서를 찾아보았지만 물음표에 대해 비슷한 것을 찾지 못했습니다. 질문: 이러한 작업은 무엇을 의미하며 코드가 정상적으로 컴파일되도록 수정하는 방법은 무엇입니까? 미리 감사드립니다 [삭제] 2014.10.30 14:26 #7580 안녕하세요! if esle 문이 때때로 저에게 효과가 없는 이유를 알려주세요. 다음은 예입니다. double H3=ObjectGet ( "H3 line" , OBJPROP_PRICE1); int start() { double price = Bid; if (price==H3) { Alert ( "Урааааа " , Symbol ()); } return ( 0 ); } 어디에: H3는 레벨의 가격 값입니다. 가격 - 현재 가격 결과적으로 가격이 이 수준에 도달했지만(때로는 그 수준에서 멈추기도 함) 경고가 작동하지 않습니다. 무슨 일이야? 1...751752753754755756757758759760761762763764765...1178 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
페레즈 ";" 브래킷용.
프로그램은 작동하지만 주기적으로 오류 4108에서 맹세합니다.
호수.
도움말을 열고 런타임 오류 를 보면 다음이 표시됩니다.
4108
ERR_INVALID_TICKET
잘못된 티켓 번호
우리는 우리가 찾고 있다고 생각합니다 ...
사람들이 도움이됩니다. 구별하고 구별하기 위해 각 통화를 자체 주문으로 거래해야합니다. + 오픈 주문 후 가격이 더 롤백되면 첫 번째 주문과 동일한 다른 주문을 열 수 있습니다.
안녕하세요 !
방금 NormalizeDouble 의 이상한 작업을 알아차렸습니다.
즉, 어드바이저는 잘 작동하고 오류가 발생하지 않지만 테스터의 로그는 매우 이상합니다.
설명하겠습니다.
나는 이익 함수를 계산합니다. 나는 예상대로 NormalizeDouble(Profit,Digits);
다음 인쇄(" 이익=",DoubleToStrMorePrecision(Profit,8));
결과적으로 로그에 "profit=0.88881912"가 표시됩니다. 이론상으로는 0.88881000 이어야 겠죠?
아니면 내가 바보이고 뭔가 잘못하고 있습니까?
안녕하세요 !
방금 NormalizeDouble의 이상한 작업을 발견했습니다.
즉, 어드바이저는 잘 작동하고 오류가 발생하지 않지만 테스터의 로그는 매우 이상합니다.
설명하겠습니다.
나는 이익 함수를 계산합니다. 나는 예상대로 NormalizeDouble(Profit,Digits);
다음 인쇄(" 이익=",DoubleToStrMorePrecision(Profit,8));
결과적으로 로그에 "profit=0.88881912"가 표시됩니다. 이론상으로는 0.88881000 이어야 겠죠?
아니면 내가 바보이고 뭔가 잘못하고 있습니까?
거래 주문과 관련된 이익 가치가 있습니까?
그렇지. 그리고 오류 없이 :-). 그래서 놀랐습니다.
빌드 735가 있습니다.
거래가 데모에 있습니다.
아아아아아 알았어요! 할당 작업 을 잊어 버렸습니다 :-). "Profit=NormalizeDouble(Profit,Digits)".
고문이 오류를 제공하지 않는 이유는 여전히 진실이 분명하지 않습니다.))
아마도 서버에서 자동으로 반올림됩니다 .....
어떤 이유에서인지 NormalizeDouble은 함수가 아닌 절차인 것 같습니다 :-).
페레즈 ";" 브래킷용.
프로그램은 작동하지만 주기적으로 오류 4108에서 맹세합니다.
호수.
사실, 당신은 그것을 제거해야합니다!
사실, 당신은 그것을 제거해야합니다!
보리스, 그에게 코드를 직접 보여 주면 더 좋을 것입니다. 그렇지 않으면 수면 부족으로 잊어 버렸습니다 ...;)
보리스, 그에게 코드를 직접 보여 주면 더 좋을 것입니다. 그렇지 않으면 수면 부족으로 잊어 버렸습니다 ...;)
귀하의 저작권을 남용하려는 것은 아닙니다! ;)
하지만 진지하게, 뭔가가 삽입되지 않았습니다! 하지만 이제 시도하겠습니다!
이제 작동했습니다! 기이한!
안녕하세요! if esle 문이 때때로 저에게 효과가 없는 이유를 알려주세요.
다음은 예입니다.
어디에:
H3는 레벨의 가격 값입니다.
가격 - 현재 가격
결과적으로 가격이 이 수준에 도달했지만(때로는 그 수준에서 멈추기도 함) 경고가 작동하지 않습니다.
무슨 일이야?