초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1324 1...131713181319132013211322132313241325132613271328132913301331...1503 새 코멘트 SanAlex 2021.07.01 10:30 #13231 Alexey Viktorov : 어제 나는이 기적을보기 위해 다운로드했습니다 ... 그리고 갑자기 그들은 나에게 tyrnet을 박탈했습니다. 뇌우 후 하루가 끝날 때까지 기술 작업. 그래서 나는 게으름에서 이 기적을 여기 에 게시된 MQL5로 다시 작성하기로 결정했습니다. 좋은 것이 없으면 나쁜 것도 없다는 것이 밝혀졌습니다. . . . . . . . 나는 당신의 Expert Advisor에 지표를 추가했습니다 - 당신이 상관하지 않을 것이라고 생각합니다!? 내가 원하는대로 된 것 같다 Sprut 185 (노란색은 여기 기존 전문가에 추가된 내용 . ) //+------------------------------------------------------------------+ //| 2 DVA_Martin.mq5 | //| © 2021, Alexey Viktorov | //| https://www.mql5.com/ru/users/alexeyvik/news | //+------------------------------------------------------------------+ #property copyright "© 2021, Alexey Viktorov" #property link " https://www.mql5.com/ru/users/alexeyvik/news " #property version "2.00" //--- #include <Trade\Trade.mqh> CTrade trade; //--- input int TakeProfit1 = 300 ; // профит первой позиции input int TakeProfit2 = 250 ; // профит второй позиции input int TakeProfit3 = 200 ; // профит третьей позиции input int TakeProfit4 = 100 ; // профит четвертой и следующих позиций input int Step = 200 ; // шаг первой позиции input int Delta = 100 ; // добавка к шагу // со второй позиции увеличивает расстояние последующих позиций на величину "дельта" от предыдущего input double Lot = 0.03 ; // первый лот открытия input double MaximalLot = 0.5 ; // максимальный лот, который мы разрешаем input int MaxTrades = 9 ; // максимальное количество позиций одного направления input double MultiplicatorLot = 1.6 ; // умножаем последующие позиции input int Magic = 123 ; // идентификатор советника //--- Пременные для хранения собранной информации double MaxLot = 0 ; double LotBuy = 0 ; double LotSell = 0 ; //--- int m_bar_current= 0 ; int StepMA_NRTR_Handle; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- trade.SetExpertMagicNumber(Magic); MaxLot = contractSize(MaximalLot); //--- create StepMA_NRTR indicator StepMA_NRTR_Handle= iCustom ( NULL , 0 , "StepMA_NRTR" ); if (StepMA_NRTR_Handle== INVALID_HANDLE ) { printf ( "Error creating StepMA_NRTR indicator" ); return ( false ); } //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { //--- Comment ( "" ); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { //--- double StepMA_NRTR[],StepMA_NRTRS[]; ArraySetAsSeries (StepMA_NRTR, true ); ArraySetAsSeries (StepMA_NRTRS, true ); int start_pos= 1 ,count= 3 ; if (!iGetArray(StepMA_NRTR_Handle, 0 ,start_pos,count,StepMA_NRTR)|| !iGetArray(StepMA_NRTR_Handle, 1 ,start_pos,count,StepMA_NRTRS)) { return ; } //--- int posTotal = PositionsTotal (); double BuyMinPrice = DBL_MAX , // Минимальная цена Buy позиции SelMaxPrice = DBL_MIN , // Максимальная цена Sell позиции BuyMinLot = 0 , // Лот самой нижней Buy позиции SelMaxLot = 0 , // Лое самой верхней Sell позиции posPrice = 0.0 , posLot = 0.0 , BuyAwerage = 0 , SelAwerage = 0 , BuyPrice = 0 , SelPrice = 0 , BuyLot = 0 , SelLot = 0 ; MqlTick tick; if (! SymbolInfoTick ( _Symbol , tick)) return ; int b = 0 , s = 0 ; for ( int i = 0 ; i < posTotal; i++) { ulong posTicket = PositionGetTicket (i); if ( PositionGetString ( POSITION_SYMBOL ) == _Symbol && PositionGetInteger ( POSITION_MAGIC ) == Magic) { posPrice = PositionGetDouble ( POSITION_PRICE_OPEN ); posLot = PositionGetDouble ( POSITION_VOLUME ); if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY ) { b++; // Считаем открытые позиции на покупку if (posPrice < BuyMinPrice) { BuyMinPrice = posPrice; BuyMinLot = posLot; BuyPrice += posPrice*posLot; // добавить к переменной BuyPrice Цена оредра 1 * лот ордера 1 BuyLot += posLot; // суммируем лоты } } if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_SELL ) { s++; // Считаем открытые позиции на продажу if (posPrice > SelMaxPrice) { SelMaxPrice = posPrice; SelMaxLot = posLot; SelPrice += posPrice*posLot; // добавить к переменной BuyPrice Цена оредра 1 * лот ордера 1 SelLot += posLot; // суммируем лоты } } } } LotBuy = b == 0 ? contractSize(Lot) : fmin (MaxLot, contractSize(BuyMinLot*MultiplicatorLot)); LotSell = s == 0 ? contractSize(Lot) : fmin (MaxLot, contractSize(SelMaxLot*MultiplicatorLot)); //--- //--- BUY Signal if (StepMA_NRTR[m_bar_current]<StepMA_NRTRS[m_bar_current]) { if (b == 0 || (b < MaxTrades && BuyMinPrice-tick.ask >= (Step+Delta*b)* _Point )) openPos( ORDER_TYPE_BUY , LotBuy, tick.ask); } //--- SELL Signal if (StepMA_NRTR[m_bar_current]>StepMA_NRTRS[m_bar_current]) { if (s == 0 || (s < MaxTrades && tick.bid-SelMaxPrice >= (Step+Delta*s)* _Point )) openPos( ORDER_TYPE_SELL , LotSell, tick.bid); } //--- посчитаем математические формулы средних цен switch (b) { case 0 : return ; case 1 : BuyAwerage = BuyPrice/BuyLot+TakeProfit1* _Point ; break ; case 2 : BuyAwerage = BuyPrice/BuyLot+TakeProfit1* _Point ; break ; case 3 : BuyAwerage = BuyPrice/BuyLot+TakeProfit3* _Point ; break ; default : BuyAwerage = BuyPrice/BuyLot+TakeProfit4* _Point ; break ; } switch (s) { case 0 : return ; case 1 : SelAwerage = SelPrice/SelLot-TakeProfit1* _Point ; break ; case 2 : SelAwerage = SelPrice/SelLot-TakeProfit2* _Point ; break ; case 3 : SelAwerage = SelPrice/SelLot-TakeProfit3* _Point ; break ; default : SelAwerage = SelPrice/SelLot-TakeProfit4* _Point ; break ; } normalizePrice(BuyAwerage); // Произведем расчет цены TP Buy normalizePrice(SelAwerage); // Произведем расчет цены TP Sell //--- for ( int i = 0 ; i < posTotal; i++) { ulong posTicket = PositionGetTicket (i); if ( PositionGetString ( POSITION_SYMBOL ) == _Symbol && PositionGetInteger ( POSITION_MAGIC ) == Magic) { double posTP = PositionGetDouble ( POSITION_TP ); if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY ) { if ( fabs (posTP-BuyAwerage) > _Point && tick.ask < BuyAwerage) // Если тейк не равен требуемой цене if (!trade.PositionModify(posTicket, 0.0 , BuyAwerage)) Print ( "Ошибка " , __LINE__ ); } if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_SELL ) { if ( fabs (posTP-SelAwerage) > _Point && tick.bid > SelAwerage) // Если тейк не равен требуемой цене if (!trade.PositionModify(posTicket, 0.0 , SelAwerage)) Print ( "Ошибка " , __LINE__ ); } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void openPos( ENUM_ORDER_TYPE type, double lot, double price) { trade.CheckVolume( _Symbol , lot, price, type); if (trade.CheckResultMarginFree() <= 0.0 ) { Print ( "Not enough money for " , EnumToString (type), " " , lot, " " , _Symbol , " Error code=" , trade.CheckResultRetcode()); return ; } if (!trade.PositionOpen( _Symbol , type, LotBuy, price, 0.0 , 0.0 )) Print (trade.ResultRetcode()); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double contractSize( double volume, string symbol = NULL ) { symbol = symbol == NULL ? _Symbol : symbol; double v = volume; double volumeStep = SymbolInfoDouble (symbol, SYMBOL_VOLUME_STEP ); v = round (volume/volumeStep)*volumeStep; double minLot = SymbolInfoDouble (symbol, SYMBOL_VOLUME_MIN ); return ((v < minLot ? minLot : v)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double normalizePrice( double &price, string symbol = NULL ) { symbol = symbol == NULL ? _Symbol : symbol; double tickSize = SymbolInfoDouble (symbol, SYMBOL_TRADE_TICK_SIZE ); price = round (price/tickSize)*tickSize; return (tickSize); } //+------------------------------------------------------------------+ //| Filling the indicator buffers from the indicator | //+------------------------------------------------------------------+ bool iGetArray( const int handle, const int buffer, const int start_pos, const int count, double &arr_buffer[]) { bool result= true ; if (! ArrayIsDynamic (arr_buffer)) { return ( false ); } ArrayFree (arr_buffer); //--- reset error code ResetLastError (); //--- fill a part of the iBands array with values from the indicator buffer int copied= CopyBuffer (handle,buffer,start_pos,count,arr_buffer); if (copied!=count) { return ( false ); } return (result); } //+------------------------------------------------------------------+ Советники: DVA_Martin 2021.06.30www.mql5.com Статьи и техническая библиотека по автоматическому трейдингу: Советники: DVA_Martin Alexey Viktorov 2021.07.01 10:58 #13232 SanAlex : 나는 당신의 Expert Advisor에 지표를 추가했습니다 - 당신이 상관하지 않을 것이라고 생각합니다!? 내가 원하는대로 된 것 같다 Sprut 185 (노란색은 여기 기존 전문가에 추가된 내용 . ) 그리고 3개의 막대에서 지표 값이 나오는 이유는 무엇입니까? 배열을 시계열로 뒤집는 이유는 무엇입니까? 일반적으로 그것은 나에게 아닌 것 같습니다 ... 마틴이 작동하지 않을 것입니다. SanAlex 2021.07.01 11:04 #13233 Alexey Viktorov : 그리고 3개의 막대에서 지표 값이 나오는 이유는 무엇입니까? 배열을 시계열로 뒤집는 이유는 무엇입니까? 일반적으로 그것은 나에게 아닌 것 같습니다 ... 마틴이 작동하지 않을 것입니다. 여기의 표시기는 방향 필터와 같으며 Expert Advisor가 전체 작업을 수행합니다. \\\\\\\\\\\\ 표시기 자체는 포지션을 열지 않습니다. Alexey Viktorov 2021.07.01 11:08 #13234 SanAlex : 여기의 표시기는 방향 필터와 같으며 Expert Advisor가 전체 작업을 수행합니다. 작업은 작성된 코드에 의해 수행되어야 합니다. 그러나 마틴이 절대 켜지지 않는 조건을 설정했습니다. 라고 생각하지만 확인할 마음도 시간도 없다. SanAlex 2021.07.01 11:10 #13235 Alexey Viktorov : 작업은 작성된 코드로 수행되어야 합니다. 그러나 마틴이 절대로 켜지지 않는 조건을 설정했습니다. 라고 생각하지만 확인할 마음도 시간도 없다. 여기에서 나는 그의 작업을 확인합니다. 모든 것이 계획대로 작동합니다. Sprut 185 2021.07.01 12:09 #13236 Alexey Viktorov : Martin은 표시기 신호가 반대일 때만 켜야 합니까 아니면 이것에 관계 없이 켜야 합니까? 예: 지표에 따라 매수 포지션이 열립니다. 가격은 주어진 거리만큼 떨어졌고 표시기는 이미 매도를 표시하고 있습니다. 매수 포지션을 열어야 합니까? 약속대로 포토샵을 좀 했습니다. 어쨌든 명확하지 않으면 개인적인 의사 소통을 통해서만 내 아이디어의 의미를 설명 할 수 있습니다. SanAlex 2021.07.01 15:49 #13237 SanAlex : 나는 여기서 100,000 루블로 이해하지 못하는 무언가를했습니다. 최대 200만 표시기를 변경하고 5분 동안. 15일 만에 100만 유로. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 전문가에 추가됨 - 총 이익(모든 쌍에서)에 대해 이익을 닫고 전문가를 제거합니다. input group "---- : Parameters: ----" input int TargetProfit = 1000000 ; // : Balance + Profit(add to balance) //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick ( void ) { //--- if ( AccountInfoDouble ( ACCOUNT_EQUITY )>=TargetProfit) { AllClose(); ExpertRemove (); } //--- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 이 2개의 표시기가 있어야 합니다( 표시기의 이름이 변경되지 않도록 하십시오) 파일: LeManTrend_Indicator.mq5 17 kb LeMan_BrainTrend1Sig.mq5 18 kb 6_Sprut_185.mq5 36 kb Vitaly Muzichenko 2021.07.01 19:30 #13238 SanAlex : 표시기를 변경하고 5분 동안. 15일 만에 100만 유로. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 전문가에 추가됨 - 총 이익(모든 쌍에서)에 대해 이익을 닫고 전문가를 제거합니다. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 이 2개의 표시기가 있어야 합니다( 표시기의 이름이 변경되지 않도록 하십시오) 설정에서 손절매 누락 Aleksei Skrypnev 2021.07.01 20:29 #13239 \n"과 같은 방법을 사용하여 문자열을 줄로 나누는 방법이 있습니다. 그러나 이미 줄로 분할된 문자열 변수를 한 줄로 붙이거나 변환하는 방법이 있습니까? 즉, 매개변수 값 등의 모든 텍스트가 이 줄에서 사용 가능한(문자열) 변수는 한 줄로 작성되었습니다. 문제는 csv에 쓸 때 발생했습니다(문자열 변수의 값은 여러 줄에 기록됨). SanAlex 2021.07.02 03:26 #13240 Vitaly Muzichenko : 설정에서 손절매 누락 손절매를 사용하면 더 이상 이익이 없습니다. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ EA를 더 자주 다시 시작해야 한다고 생각합니다. 예를 들어, 일주일 동안 총 이익(모든 쌍에서)을 가져갔고 EA는 모든 쌍을 남겼습니다. 모든 쌍에서 새로운 총 이익이 발생할 때까지 Expert Advisor를 다시 시작합니다. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\ 스톱에 대한 또 다른 생각이 있었습니다. 스톱은 포지션을 청산하는 것이 아니라 반대의 (수익성이 없는) 오픈 포지션이 많이 있는 반대 포지션을 여는 것입니다. 다음은 많은 오픈 포지션의 계정입니다. int total= PositionsTotal (); for ( int i=total- 1 ; i>= 0 ; i--) // returns the number of open positions { string position_GetSymbol= PositionGetSymbol (i); // GetSymbol позиции if (position_GetSymbol==m_symbol.Name()) { if (m_position.PositionType()== POSITION_TYPE_BUY ) { PROFIT_BUY=PROFIT_BUY+ PositionGetDouble ( POSITION_PROFIT ); PROFIT_BUY_Lot=PROFIT_BUY_Lot+ PositionGetDouble ( POSITION_VOLUME ); } else { PROFIT_SELL=PROFIT_SELL+ PositionGetDouble ( POSITION_PROFIT ); PROFIT_SELL_Lot=PROFIT_SELL_Lot+ PositionGetDouble ( POSITION_VOLUME ); } { PROFIT_CLOSE= AccountInfoDouble ( ACCOUNT_PROFIT ); } } } //--- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 완전한 넌센스로 판명됩니다. 요컨대, 손으로 열어야 하며 다른 모든 것은 수동 거래에 도움이 되어야 합니다. 1...131713181319132013211322132313241325132613271328132913301331...1503 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
어제 나는이 기적을보기 위해 다운로드했습니다 ... 그리고 갑자기 그들은 나에게 tyrnet을 박탈했습니다. 뇌우 후 하루가 끝날 때까지 기술 작업. 그래서 나는 게으름에서 이 기적을 여기 에 게시된 MQL5로 다시 작성하기로 결정했습니다.
좋은 것이 없으면 나쁜 것도 없다는 것이 밝혀졌습니다. . . . . . . .
나는 당신의 Expert Advisor에 지표를 추가했습니다 - 당신이 상관하지 않을 것이라고 생각합니다!? 내가 원하는대로 된 것 같다 Sprut 185
(노란색은 여기 기존 전문가에 추가된 내용 . )
나는 당신의 Expert Advisor에 지표를 추가했습니다 - 당신이 상관하지 않을 것이라고 생각합니다!? 내가 원하는대로 된 것 같다 Sprut 185
(노란색은 여기 기존 전문가에 추가된 내용 . )
그리고 3개의 막대에서 지표 값이 나오는 이유는 무엇입니까? 배열을 시계열로 뒤집는 이유는 무엇입니까?
일반적으로 그것은 나에게 아닌 것 같습니다 ... 마틴이 작동하지 않을 것입니다.
그리고 3개의 막대에서 지표 값이 나오는 이유는 무엇입니까? 배열을 시계열로 뒤집는 이유는 무엇입니까?
일반적으로 그것은 나에게 아닌 것 같습니다 ... 마틴이 작동하지 않을 것입니다.
여기의 표시기는 방향 필터와 같으며 Expert Advisor가 전체 작업을 수행합니다.
\\\\\\\\\\\\
표시기 자체는 포지션을 열지 않습니다.
여기의 표시기는 방향 필터와 같으며 Expert Advisor가 전체 작업을 수행합니다.
작업은 작성된 코드에 의해 수행되어야 합니다. 그러나 마틴이 절대 켜지지 않는 조건을 설정했습니다. 라고 생각하지만 확인할 마음도 시간도 없다.
작업은 작성된 코드로 수행되어야 합니다. 그러나 마틴이 절대로 켜지지 않는 조건을 설정했습니다. 라고 생각하지만 확인할 마음도 시간도 없다.
여기에서 나는 그의 작업을 확인합니다. 모든 것이 계획대로 작동합니다.
Martin은 표시기 신호가 반대일 때만 켜야 합니까 아니면 이것에 관계 없이 켜야 합니까?
예: 지표에 따라 매수 포지션이 열립니다. 가격은 주어진 거리만큼 떨어졌고 표시기는 이미 매도를 표시하고 있습니다. 매수 포지션을 열어야 합니까?
약속대로 포토샵을 좀 했습니다.
어쨌든 명확하지 않으면 개인적인 의사 소통을 통해서만 내 아이디어의 의미를 설명 할 수 있습니다.
나는 여기서 100,000 루블로 이해하지 못하는 무언가를했습니다. 최대 200만
표시기를 변경하고 5분 동안. 15일 만에 100만 유로.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
전문가에 추가됨 - 총 이익(모든 쌍에서)에 대해 이익을 닫고 전문가를 제거합니다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
이 2개의 표시기가 있어야 합니다( 표시기의 이름이 변경되지 않도록 하십시오)
표시기를 변경하고 5분 동안. 15일 만에 100만 유로.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
전문가에 추가됨 - 총 이익(모든 쌍에서)에 대해 이익을 닫고 전문가를 제거합니다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
이 2개의 표시기가 있어야 합니다( 표시기의 이름이 변경되지 않도록 하십시오)
설정에서 손절매 누락
\n"과 같은 방법을 사용하여 문자열을 줄로 나누는 방법이 있습니다.
그러나 이미 줄로 분할된 문자열 변수를 한 줄로 붙이거나 변환하는 방법이 있습니까?
즉, 매개변수 값 등의 모든 텍스트가 이 줄에서 사용 가능한(문자열) 변수는 한 줄로 작성되었습니다.
문제는 csv에 쓸 때 발생했습니다(문자열 변수의 값은 여러 줄에 기록됨).
설정에서 손절매 누락
손절매를 사용하면 더 이상 이익이 없습니다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
EA를 더 자주 다시 시작해야 한다고 생각합니다. 예를 들어, 일주일 동안 총 이익(모든 쌍에서)을 가져갔고 EA는 모든 쌍을 남겼습니다.
모든 쌍에서 새로운 총 이익이 발생할 때까지 Expert Advisor를 다시 시작합니다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\
스톱에 대한 또 다른 생각이 있었습니다. 스톱은 포지션을 청산하는 것이 아니라 반대의 (수익성이 없는) 오픈 포지션이 많이 있는 반대 포지션을 여는 것입니다.
다음은 많은 오픈 포지션의 계정입니다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
완전한 넌센스로 판명됩니다. 요컨대, 손으로 열어야 하며 다른 모든 것은 수동 거래에 도움이 되어야 합니다.