MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1671 1...166416651666166716681669167016711672167316741675167616771678...1953 새 코멘트 Nerd Trader 2021.10.13 11:37 #16701 MakarFX # : foo2가 true를 반환하면 여기에서 오류를 찾으십시오. 나는 조건과 레토르트 사이에 x를 출력하고 그것이 참일 때를 보지만, OnTick에서는 항상 거짓이다. Nerd Trader 2021.10.13 11:45 #16702 bool BESet( double sl = 0 , color arrow_color = 0 , string order_type = "" ){ bool order = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0 , arrow_color ); if (!order) { ResetLastError (); Print ( "!Ошибка " ,order_type, ". Причина: " , GetLastError ()); return false ; } else { return true ; } } bool BEActivate(){ double unrealized_profit = 0 ; color arrow_color = 0 ; string order_type = "" ; double sl = 0 ; bool is_be = false ; // если объявить true, то в OnTick всегда будет возвращаться true if ( OrdersTotal () >= 1 ){ for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--){ if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == false ) continue ; if (OrderType() == OP_BUY){ if (OrderStopLoss() > OrderOpenPrice()) continue ; unrealized_profit = NormalizeDouble ( MathAbs (OrderOpenPrice() - Ask)/ Point , 0 ); if (unrealized_profit >= save_zone && Ask > OrderOpenPrice()){ is_be = BESet( NormalizeDouble (OrderOpenPrice()+breakeven* Point , Digits ), clrGreenYellow , "Бай" ); Print ( "BE " ,is_be); } } if (OrderType() == OP_SELL){ ... ... } } } return is_be; } void OnTick () { last_time = iTime ( NULL , 0 , 0 ); bool is_be = BEActivate(); if (last_time > bar.time_open){ bar.Initialize(); P r int ( "is_be " ,is_be); //Всегда FALSE ... } 중복 코드를 제거했습니다. Tretyakov Rostyslav 2021.10.13 11:54 #16703 Nerd Trader # : 중복 코드를 제거했습니다. last_time = iTime ( NULL , 0 , 0 ); bool is_be = BEActivate(); if ( last_time > bar.time_open ){ bar.Initialize(); P r int ( "is_be " ,is_be); //Всегда FALSE 항상 거짓 Tretyakov Rostyslav 2021.10.13 12:01 #16704 Nerd Trader # : 중복 코드를 제거했습니다. 아래로 이동 void OnTick () { bool is_be = BEActivate(); if (last_time > bar.time_open){ bar.Initialize(); Print ( "is_be " ,is_be); //Всегда FALSE ... last_time = iTime ( NULL , 0 , 0 ); } Nerd Trader 2021.10.13 12:20 #16705 MakarFX # : 아래로 이동 xs 및 여기에 있지만 BEActivate()에서 100가지가 넘는 true 중 OnTick()에서 true가 세 번만 나타납니다. :))) Tretyakov Rostyslav 2021.10.13 12:26 #16706 Nerd Trader # : xs 및 여기에 있지만 BEActivate()에서 100가지가 넘는 true 중 OnTick()에서 true가 세 번만 나타납니다. :))) 그리고 또 다른 질문... 수업을 없애고 싶지 않으세요? Nerd Trader 2021.10.13 12:30 #16707 MakarFX # : 그리고 또 다른 질문... 수업을 없애고 싶지 않으세요? 그런 농담으로 내 뻐꾸기를 곧 제거 할 것입니다. Mikhail Toptunov 2021.10.13 12:42 #16708 MakarFX # : 이것은 OnCalculate 없이 수행할 수 있습니다. OnCalculate() 함수는 사용자 지정 표시기에서만 호출됩니다. OnCalculate() 함수에 의해 표시되는 데이터가 필요합니다. 누군가 클래스를 통해 구현했을 수도 있습니다! Tretyakov Rostyslav 2021.10.13 12:58 #16709 Mikhail Toptunov # : OnCalculate() 함수 에 의해 표시되는 데이터가 필요합니다. 누군가 클래스를 통해 구현했을 수도 있습니다! 그게 무슨 뜻이야? законопослушный гражданин 2021.10.13 13:39 #16710 안녕하세요. 문제를 해결하는 데 도움이 됩니다. M15 양초에서 여러 거래가 연속으로 열립니다. 하나 이상의 트랜잭션을 열지 않아야 합니다. 고문의 논리는 이전 주문이 닫힐 때까지 다음 주문이 열리지 않지만 때로는 일련의 거래가 긴 촛불에서 열리는 방식으로 배열됩니다. 이 상황을 방지하려면 코드에 무엇을 추가해야 합니까? 코드 스니펫: //+-----------------------------------------------------------------------------------------------+ //| Функция проверки открытых оредров | //+-----------------------------------------------------------------------------------------------+ bool bCheckOrders() { // Переберем в цикле ордера, для проверки открытых ордеров данным советником for ( int i = 0 ; i <= OrdersTotal (); i++) if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) return ( false ); return ( true ); } //+-----------------------------------------------------------------------------------------------+ //| Функция поиска сигнала на покупку | //+-----------------------------------------------------------------------------------------------+ bool bSignalBuy() { if (dMA > Open[ 1 ] && dMA < Close[ 1 ]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика. return ( true ); return ( false ); } //+-----------------------------------------------------------------------------------------------+ //| Функция поиска сигнала на продажу | //+-----------------------------------------------------------------------------------------------+ bool bSignalSell() { if (dMA < Open[ 1 ] && dMA > Close[ 1 ]) return ( true ); return ( false ); } //+-----------------------------------------------------------------------------------------------+ //| Функция открытия ордера на покупку | //+-----------------------------------------------------------------------------------------------+ void vOrderOpenBuy() { // Тикет ордера int iOTi = 0 ; iOTi = OrderSend ( Symbol (), OP_BUY, LOT(), Ask, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE ); // Проверим открылся ли ордер if (iOTi > 0 ) // Есди да, то выставим уровни убытка и прибыли vOrderModify(iOTi); else // Если нет, то получим ошибку vError( GetLastError ()); } //+-----------------------------------------------------------------------------------------------+ //| Функция открытия ордера на продажу | //+-----------------------------------------------------------------------------------------------+ void vOrderOpenSell() { // Тикет ордера int iOTi = 0 ; iOTi = OrderSend ( Symbol (), OP_SELL, LOT(), Bid, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE ); // Проверим открылся ли ордер if (iOTi > 0 ) // Есди да, то выставим уровни убытка и прибыли vOrderModify(iOTi); else // Если нет, то получим ошибку vError( GetLastError ()); } //+-----------------------------------------------------------------------------------------------+ //| Функция модификации ордера | //+-----------------------------------------------------------------------------------------------+ void vOrderModify( int iOTi) { int iOTy = - 1 ; // Тип ордера double dOOP = 0 ; // Цена открытия ордера double dOSL = 0 ; // Стоп Лосс int iMag = 0 ; // Идентификатор советника double dSL = 0 ; // Уровень убытка double dTP = 0 ; // Уровень прибыли // Выберем по тикету открытый ордер, получим некоторые значения if ( OrderSelect (iOTi, SELECT_BY_TICKET, MODE_TRADES)) { iOTy = OrderType(); dOOP = OrderOpenPrice(); dOSL = OrderStopLoss(); iMag = OrderMagicNumber(); } // Если ордер открыл данный советник, то входим в условие if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMag) { // Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер if (dOSL == 0 ) { if (iOTy == OP_BUY) { dSL = NormalizeDouble (dOOP - StopLoss * Point , Digits ); dTP = NormalizeDouble (dOOP + TakeProfit * Point , Digits ); bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE ); } if (iOTy == OP_SELL) { dSL = NormalizeDouble (dOOP + StopLoss * Point , Digits ); dTP = NormalizeDouble (dOOP - TakeProfit * Point , Digits ); bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE ); } } } } 1...166416651666166716681669167016711672167316741675167616771678...1953 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
foo2가 true를 반환하면 여기에서 오류를 찾으십시오.
중복 코드를 제거했습니다.
중복 코드를 제거했습니다.
항상 거짓
중복 코드를 제거했습니다.
아래로 이동
아래로 이동
xs 및 여기에 있지만 BEActivate()에서 100가지가 넘는 true 중 OnTick()에서 true가 세 번만 나타납니다. :)))
그리고 또 다른 질문...
수업을 없애고 싶지 않으세요?
그리고 또 다른 질문...
수업을 없애고 싶지 않으세요?
이것은 OnCalculate 없이 수행할 수 있습니다.
OnCalculate() 함수는 사용자 지정 표시기에서만 호출됩니다.OnCalculate() 함수에 의해 표시되는 데이터가 필요합니다.
누군가 클래스를 통해 구현했을 수도 있습니다!OnCalculate() 함수 에 의해 표시되는 데이터가 필요합니다.
누군가 클래스를 통해 구현했을 수도 있습니다!그게 무슨 뜻이야?
안녕하세요. 문제를 해결하는 데 도움이 됩니다. M15 양초에서 여러 거래가 연속으로 열립니다.
하나 이상의 트랜잭션을 열지 않아야 합니다. 고문의 논리는 이전 주문이 닫힐 때까지 다음 주문이 열리지 않지만 때로는 일련의 거래가 긴 촛불에서 열리는 방식으로 배열됩니다. 이 상황을 방지하려면 코드에 무엇을 추가해야 합니까?
코드 스니펫: