MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1838 1...183118321833183418351836183718381839184018411842184318441845...1953 새 코멘트 законопослушный гражданин 2021.12.31 15:28 #18371 Tretyakov Rostyslav # : // Параметры советника input string sParametersEA = "" ; // Параметры советника input double Lot = 0.01 ; // Количество лотов input double Lotcontrol = 0.08 ; // ----- input int StopLoss = 30 ; // Стоп (SL) input int TakeProfit = 30 ; // Тейк (TP) input int HourPause = 1 ; // Пауза в часах input int Slippage = 3 ; // Проскальзование (в пунктах) input int Magic = 1 ; // Индентификатор советника input double K_Martin1 = 0.01 ; // Множитель мартин 1 input double K_Martin2 = 1.9 ; // Множитель мартин 2 input double K_Martin3 = 1.4 ; // Множитель мартин 3 input int OrdersClose = 3 ; // Ограничение лотности мартин1 input int OrdersClose2 = 5 ; // Ограничение лотности мартин2 input int DigitsLot = 2 ; // Точность лотности // Параметры индикатора input string sParametersMA = "" ; // Параметры индикатора input int PeriodMA = 14 ; // Период мувинга input int MovingShift = 1 ; // Сдвиг мувинга // Глобальные переменные datetime Start= 0 ,newbar; double dMA; double MaxMartinLot; double MaxMartinLot2; //+-----------------------------------------------------------------------------------------------+ int OnInit () { Start = TimeCurrent (); MaxMartinLot = Lot* MathPow ( 1.4 ,OrdersClose); MaxMartinLot2 = Lot* MathPow (K_Martin2,OrdersClose2); int Y = 15 ; DrawLABEL( "nextlot" , 1 , 5 ,Y, clrLime , "" ); Y += 20 ; DrawLABEL( "currentlot" , 1 , 5 ,Y, clrLime , "" ); Y += 30 ; return ( INIT_SUCCEEDED ); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit ( const int reason) { } //+-----------------------------------------------------------------------------------------------+ void OnTick () { // Получим значение индикатора dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0. // выключаем торговлю if (OrderLots()>=Lotcontrol) { Start= TimeCurrent ()+(HourPause* 60 * 60 ); } // Если нет открытых ордеров, то входим в условие if ((CountOrders()== 0 )&& Start<= TimeCurrent ()) { // Если появился сигнал на покупку, то откроем ордер на покупку if (bSignalBuy() == true ) vOrderOpenBuy(); // Если появился сигнал на продажу, то откроем ордер на продажу if (bSignalSell() == true ) vOrderOpenSell(); } // Пишем какой лот текущий и какой следующий DrawLABEL( "nextlot" , 1 , 5 , 0 ,Color1(), StringConcatenate ( "CURRENT LOT: " ,DoubleToStr(LOT(), 2 ))); DrawLABEL( "currentlot" , 1 , 5 , 0 ,Color2(), StringConcatenate ( "NEXT LOT: " ,DoubleToStr(LOT(), 2 ))); } 일종의 수집이지만 테스터에서 한 번만 작동합니다. 한 번 더 테스트하면 단일 트랜잭션이 열리지 않습니다. 첫 번째 테스트 중에는 간격이 설정되지만 로트가 시작 로트로 재설정되면 더 이상 거래가 열리지 않습니다. 내가 어디 잘못갔어? Alekseu Fedotov 2021.12.31 15:51 #18372 законопослушный гражданин # : 일종의 수집이지만 테스터에서 한 번만 작동합니다. 한 번 더 테스트하면 단일 트랜잭션이 열리지 않습니다. 첫 번째 테스트 중에는 간격이 설정되지만 로트가 시작 로트로 재설정되면 더 이상 거래가 열리지 않습니다. 내가 어디 잘못갔어? 종종 그 전에 f1을 누르고 기능을 클릭하고 다음을 읽으십시오. OrderSelect() 함수를 사용하여 주문을 미리 선택해야 합니다. 이것은 OrderLots() 함수를 위한 것입니다. 술에 취해 죄송합니다. 새해 복 많이 받으세요! Alekseu Fedotov 2021.12.31 15:56 #18373 законопослушный гражданин # : 일종의 수집이지만 테스터에서 한 번만 작동합니다. 한 번 더 테스트하면 - 단일 트랜잭션을 열지 않습니다. 첫 번째 테스트 중에는 간격이 설정되지만 로트가 시작 로트로 재설정되면 더 이상 거래가 열리지 않습니다. 내가 어디서 잘못했니? 선물 이 기능을 사용해 보세요: //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает сумму лотов открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetAmountLotFromOpenPos( string sy= "" , int op=- 1 , int mn=- 1 ) { double l= 0 ; int i,k= OrdersTotal (); if (sy== "0" ) sy= Symbol (); for (i= 0 ; i<k; i++) { if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol()==sy || sy== "" ) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op< 0 || OrderType()==op) { if (mn< 0 || OrderMagicNumber()==mn) { l+=OrderLots(); } } } } } } return (l); } законопослушный гражданин 2021.12.31 16:04 #18374 Alekseu Fedotov # : 선물 이 기능을 사용해 보세요: 감사합니다 새해 복 많이 받으세요) Vladimir Simakov 2021.12.31 16:21 #18375 Andrey Sokolov # : 네. 나는 가능한 한 간단하게 그것을 응용 프로그램에 연결하고 거기에서 작동합니다. TestLib의 컨텍스트에서 mql5를 호출합니까? TestLib::TestClass::Inc()이어야 합니다. Alekseu Fedotov 2021.12.31 16:35 #18376 законопослушный гражданин # : 감사합니다 새해 복 많이 받으세요) 그렇다면 연락하십시오! Andrei Sokolov 2021.12.31 18:35 #18377 законопослушный гражданин # : 일종의 수집이지만 테스터에서 한 번만 작동합니다. 내가 어디서 잘못했니? 디버거는 이러한 문제를 해결하는 데 매우 유용합니다. 나는 그것을 사용하는 것이 좋습니다 Andrei Sokolov 2021.12.31 18:35 #18378 Vladimir Simakov # : TestLib의 컨텍스트에서 mql5를 호출합니까? TestLib::TestClass::Inc()여야 합니다. 감사해요 Tretyakov Rostyslav 2022.01.01 09:32 #18379 законопослушный гражданин # : 일종의 수집이지만 테스터에서 한 번만 작동합니다. 내가 어디 잘못갔어? // Параметры советника input string sParametersEA = "" ; // Параметры советника input double Lot = 0.01 ; // Количество лотов input double Lotcontrol = 0.08 ; // ----- input int StopLoss = 30 ; // Стоп (SL) input int TakeProfit = 30 ; // Тейк (TP) input int HourPause = 1 ; // Пауза в часах input int Slippage = 3 ; // Проскальзование (в пунктах) input int Magic = 1 ; // Индентификатор советника input double K_Martin1 = 0.01 ; // Множитель мартин 1 input double K_Martin2 = 1.9 ; // Множитель мартин 2 input double K_Martin3 = 1.4 ; // Множитель мартин 3 input int OrdersClose = 3 ; // Ограничение лотности мартин1 input int OrdersClose2 = 5 ; // Ограничение лотности мартин2 input int DigitsLot = 2 ; // Точность лотности // Параметры индикатора input string sParametersMA = "" ; // Параметры индикатора input int PeriodMA = 14 ; // Период мувинга input int MovingShift = 1 ; // Сдвиг мувинга // Глобальные переменные datetime Start= 0 ,newbar; double dMA; double MaxMartinLot; double MaxMartinLot2; //+-----------------------------------------------------------------------------------------------+ int OnInit () { Start = TimeCurrent (); MaxMartinLot = Lot* MathPow ( 1.4 ,OrdersClose); MaxMartinLot2 = Lot* MathPow (K_Martin2,OrdersClose2); int Y = 15 ; DrawLABEL( "nextlot" , 1 , 5 ,Y, clrLime , "" ); Y += 20 ; DrawLABEL( "currentlot" , 1 , 5 ,Y, clrLime , "" ); Y += 30 ; return ( INIT_SUCCEEDED ); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit ( const int reason) { } //+-----------------------------------------------------------------------------------------------+ void OnTick () { // Получим значение индикатора dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0. // выключаем торговлю if ( GetInfoLastPos( 1 ) >=Lotcontrol) { Start= GetInfoLastPos( 3 ) +(HourPause* 60 * 60 ); } // Если нет открытых ордеров, то входим в условие if ((CountOrders()== 0 )&& Start<= TimeCurrent ()) { // Если появился сигнал на покупку, то откроем ордер на покупку if (bSignalBuy() == true ) vOrderOpenBuy(); // Если появился сигнал на продажу, то откроем ордер на продажу if (bSignalSell() == true ) vOrderOpenSell(); } // Пишем какой лот текущий и какой следующий DrawLABEL( "nextlot" , 1 , 5 , 0 ,Color1(), StringConcatenate ( "CURRENT LOT: " ,DoubleToStr(LOT(), 2 ))); DrawLABEL( "currentlot" , 1 , 5 , 0 ,Color2(), StringConcatenate ( "NEXT LOT: " ,DoubleToStr(LOT(), 2 ))); } //+----------------------------------------------------------------------------+ //| Функция возвращает по символу и магику | //| 1 - размер лота последней закрытой позиции | //| 2 - размер профита с учетом комиссии и свопа последней закрытой позиции | //| 3 - время последней закрытой позиции | //+----------------------------------------------------------------------------+ double GetInfoLastPos( int a= 1 ) { datetime t= 0 ; double result= 0 ,l= 0 ,p= 0 ,f= 0 ; int i=OrdersHistoryTotal()- 1 ; for ( int pos=i;pos>= 0 ;pos--) { if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();} } } } } if (a== 1 ) {result=l;} else if (a== 2 ) {result=p;} else if (a== 3 ) {result=( double )t;} else {result= 0 ;} return (result); } законопослушный гражданин 2022.01.01 13:24 #18380 Tretyakov Rostyslav # : 고맙습니다. void를 통해 GetInfoLastPos()를 작성했습니다.... 1...183118321833183418351836183718381839184018411842184318441845...1953 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
일종의 수집이지만 테스터에서 한 번만 작동합니다.
한 번 더 테스트하면 단일 트랜잭션이 열리지 않습니다.
첫 번째 테스트 중에는 간격이 설정되지만 로트가 시작 로트로 재설정되면 더 이상 거래가 열리지 않습니다.
내가 어디 잘못갔어?
일종의 수집이지만 테스터에서 한 번만 작동합니다.
한 번 더 테스트하면 단일 트랜잭션이 열리지 않습니다.
첫 번째 테스트 중에는 간격이 설정되지만 로트가 시작 로트로 재설정되면 더 이상 거래가 열리지 않습니다.
내가 어디 잘못갔어?
종종 그 전에 f1을 누르고 기능을 클릭하고 다음을 읽으십시오.
OrderSelect() 함수를 사용하여 주문을 미리 선택해야 합니다.
이것은 OrderLots() 함수를 위한 것입니다.
술에 취해 죄송합니다.
새해 복 많이 받으세요!
일종의 수집이지만 테스터에서 한 번만 작동합니다.
한 번 더 테스트하면 - 단일 트랜잭션을 열지 않습니다.
첫 번째 테스트 중에는 간격이 설정되지만 로트가 시작 로트로 재설정되면 더 이상 거래가 열리지 않습니다.
내가 어디서 잘못했니?
선물
이 기능을 사용해 보세요:
선물
이 기능을 사용해 보세요:
감사합니다 새해 복 많이 받으세요)
네. 나는 가능한 한 간단하게 그것을 응용 프로그램에 연결하고 거기에서 작동합니다.
감사합니다 새해 복 많이 받으세요)
그렇다면 연락하십시오!
일종의 수집이지만 테스터에서 한 번만 작동합니다.
내가 어디서 잘못했니?
디버거는 이러한 문제를 해결하는 데 매우 유용합니다. 나는 그것을 사용하는 것이 좋습니다
TestLib의 컨텍스트에서 mql5를 호출합니까? TestLib::TestClass::Inc()여야 합니다.
감사해요
일종의 수집이지만 테스터에서 한 번만 작동합니다.
내가 어디 잘못갔어?고맙습니다.
void를 통해 GetInfoLastPos()를 작성했습니다....