초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 723 1...716717718719720721722723724725726727728729730...1503 새 코멘트 [삭제] 2017.01.24 06:21 #7221 사람들은 내가 무엇을 잘못하고 있는지 알려줍니다. 왜 두 개의 표시기 iRSI, iCCI가 문제를 일으키지 않고 MA와 BB가 경고를 표시합니다(형식 변환 Indicator.mqh로 인한 데이터 손실 가능성 ) //+------------------------------------------------------------------+ //| Indicator.mqh | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" // интерфейс к индикаторам. class CIndicators{ public : double iRSI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift); double iCCI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift); double iBands ( string symbol, ENUM_TIMEFRAMES tf, int BBPeriod, int shift, double BBDeviation, ENUM_APPLIED_PRICE BBPrice ); double iMA ( string symbol, ENUM_TIMEFRAMES tf, int nMAPeriod, int shift, ENUM_MA_METHOD eMAMethod , ENUM_APPLIED_PRICE MAPrice); }; // -Создадим экземпляр индикатора iRSI double CIndicators:: iRSI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift){ //--- int hRSI = iRSI (symbol, tf, period, applied); if (hRSI == INVALID_HANDLE ) return 0.0 ; double rsi[]; CopyBuffer (hRSI, 0 , shift, 1 , rsi); if ( ArraySize (rsi)) return rsi[ 0 ]; return 0.0 ; //--Создадим экземпляр индикатора iCCI } //---------------------------------- double CIndicators:: iCCI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift){ int hCCI = iCCI ( Symbol (), PERIOD_CURRENT , 55 , PRICE_CLOSE ); if (hCCI == INVALID_HANDLE ) return 0.0 ; double cci[]; ArrayResize (cci, 1 ); CopyBuffer (hCCI, 0 , 0 , 1 , cci); return cci[ 0 ];} //-------------------------------------------------- // Создадим экземпляр индикатора ВВ double CIndicators:: iBands ( string symbol, ENUM_TIMEFRAMES tf, int BBPeriod, int shift, double BBDeviation, ENUM_APPLIED_PRICE BBPrice){ int hBands = iBands ( Symbol (),tf,BBPeriod, 0 ,BBDeviation, PRICE_CLOSE ); if (hBands== INVALID_HANDLE ) return 0.0 ; // Создадим массив значений верхней границы ВВ double fBBUpper[]; ArrayResize (fBBUpper, true ); CopyBuffer (hBands, UPPER_BAND , 0 , 3 ,fBBUpper); return fBBUpper[ 0 ]; // Создадим массив значений нижней границы ВВ double fBBLower[]; ArraySetAsSeries (fBBLower, true ); CopyBuffer (hBands, LOWER_BAND , 0 , 3 ,fBBLower); return fBBLower[ 0 ]; } // Создадим экземпляр индикатора МА double CIndicators:: iMA ( string symbol, ENUM_TIMEFRAMES tf, int nMAPeriod, int shift, ENUM_MA_METHOD eMAMethod , ENUM_APPLIED_PRICE MAPrice){ // получим его хэндл int hMA= iMA ( Symbol (), PERIOD_CURRENT , nMAPeriod, 0 , MODE_EMA , PRICE_CLOSE ); if (hMA == INVALID_HANDLE ) return 0.0 ; // Создадим массив значений МА,заполним тремя последними значениями мувинга. double fMA[]; ArraySetAsSeries (fMA, true ); CopyBuffer (hMA, 0 , 0 , 3 ,fMA); return fMA[ 0 ];} Questions from Beginners MQL5 지표를 무료로 작성해 드립니다 Indicators with alerts/signal [삭제] 2017.01.24 08:07 #7222 그리고 나는 또한 묻고 싶었습니다. 거래 요청 에서 변경해야 할 사항, 오류 10030이 나타났습니다, , 1년 전, EA 코드가 문제 없이 작동했는데 이제 다시 MQL5 변경 사항의 혁신을 읽고/검색해야 합니다. // функция открытия позиции с рынка bool MarketOrder( const string sSymbol, const ENUM_POSITION_TYPE eType, const double fLot, const int nSL = 0 , const int nTP = 0 , const ulong nMagic = 0 , const uint nSlippage = 1000 ){ bool bRetVal = false ; // запрос MqlTradeRequest oRequest = { 0 }; MqlTradeResult oResult = { 0 }; double fPoint = SymbolInfoDouble (sSymbol, SYMBOL_POINT ); int nDigits = ( int ) SymbolInfoInteger (sSymbol, SYMBOL_DIGITS ); oRequest.action = TRADE_ACTION_DEAL ; oRequest.symbol = sSymbol; oRequest.volume = fLot; oRequest.stoplimit = 0 ; oRequest.deviation = nSlippage; if (eType == POSITION_TYPE_BUY ) { oRequest.type = ORDER_TYPE_BUY ; oRequest.price = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_ASK ), nDigits); oRequest.sl = NormalizeDouble (oRequest.price - nSL * fPoint, nDigits) * (nSL > 0 ); oRequest.tp = NormalizeDouble (oRequest.price + nTP * fPoint, nDigits) * (nTP > 0 ); } if (eType == POSITION_TYPE_SELL ) { oRequest.type = ORDER_TYPE_SELL ; oRequest.price = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_BID ), nDigits); oRequest.sl = NormalizeDouble (oRequest.price + nSL * fPoint, nDigits) * (nSL > 0 ); oRequest.tp = NormalizeDouble (oRequest.price - nTP * fPoint, nDigits) * (nTP > 0 ); } // определим допустимый тип заливки ордера (зависит от типа исполнения - Instant, Market, биржевое и т.д.) switch (( int ) SymbolInfoInteger (sSymbol, SYMBOL_FILLING_MODE )) { case SYMBOL_FILLING_FOK : oRequest.type_filling = ORDER_FILLING_FOK ; break ; case SYMBOL_FILLING_IOC : oRequest.type_filling = ORDER_FILLING_IOC ; break ; default : oRequest.type_filling = ORDER_FILLING_RETURN ; } oRequest.magic = nMagic; // проверка перед отправкой MqlTradeCheckResult oCheckResult= { 0 }; bool bCheck = OrderCheck (oRequest, oCheckResult); Print ( "Проверка заявки MarketOrder:" , " OrderCheck = " , bCheck, ", retcode = " , oCheckResult.retcode, ", balance = " , NormalizeDouble (oCheckResult.balance, 2 ), ", equity = " , NormalizeDouble (oCheckResult.equity, 2 ), ", margin = " , NormalizeDouble (oCheckResult.margin, 2 ), ", margin_free = " , NormalizeDouble (oCheckResult.margin_free, 2 ), ", margin_level = " , NormalizeDouble (oCheckResult.margin_level, 2 ), ", comment = " , oCheckResult.comment); // если проверка удачная - отправка заявки if (bCheck == true && oCheckResult.retcode == 0 ) { bool bResult = false ; // 3 попытки выставления ордера for ( int k = 0 ; k < 3 ; k++) { bResult = OrderSend (oRequest, oResult); if (bResult == true && oResult.retcode == TRADE_RETCODE_DONE ) break ; if (k == 2 ) break ; Sleep ( 100 ); } Print ( "Отправка заявки:" , " OrderSend = " , bResult, ", retcode = " , oResult.retcode, ", deal = " , oResult.deal, ", order = " , oResult.order, ", volume = " , NormalizeDouble (oResult.volume, 2 ), ", price = " , NormalizeDouble (oResult.price, _Digits ), ", bid = " , NormalizeDouble (oResult.bid, _Digits ), ", ask = " , NormalizeDouble (oResult.ask, _Digits ), ", comment = " , oResult.comment, ", request_id = " ,oResult.request_id); if (oResult.retcode == TRADE_RETCODE_DONE ) bRetVal = true ; } else if (oResult.retcode == TRADE_RETCODE_NO_MONEY ) { Print ( "Недостаточно денег для открытия позиции. Работа эксперта прекращена." ); ExpertRemove (); } return (bRetVal);} Questions from Beginners MQL5 MQL4 to MQL5 How do I open Alexey Viktorov 2017.01.24 09:51 #7223 Alexander Antoshkin : 그리고 나는 또한 묻고 싶었습니다. 거래 요청 에서 변경해야 할 사항, 오류 10030이 나타났습니다, , 1년 전, EA 코드가 문제 없이 작동했는데 이제 다시 MQL5 변경 사항의 혁신을 읽고/검색해야 합니다. // функция открытия позиции с рынка bool MarketOrder( const string sSymbol, const ENUM_POSITION_TYPE eType, const double fLot, const int nSL = 0 , const int nTP = 0 , const ulong nMagic = 0 , const uint nSlippage = 1000 ){ bool bRetVal = false ; // запрос MqlTradeRequest oRequest = { 0 }; MqlTradeResult oResult = { 0 }; double fPoint = SymbolInfoDouble (sSymbol, SYMBOL_POINT ); int nDigits = ( int ) SymbolInfoInteger (sSymbol, SYMBOL_DIGITS ); oRequest.action = TRADE_ACTION_DEAL ; oRequest.symbol = sSymbol; oRequest.volume = fLot; oRequest.stoplimit = 0 ; oRequest.deviation = nSlippage; if (eType == POSITION_TYPE_BUY ) { oRequest.type = ORDER_TYPE_BUY ; oRequest.price = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_ASK ), nDigits); oRequest.sl = NormalizeDouble (oRequest.price - nSL * fPoint, nDigits) * (nSL > 0 ); oRequest.tp = NormalizeDouble (oRequest.price + nTP * fPoint, nDigits) * (nTP > 0 ); } if (eType == POSITION_TYPE_SELL ) { oRequest.type = ORDER_TYPE_SELL ; oRequest.price = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_BID ), nDigits); oRequest.sl = NormalizeDouble (oRequest.price + nSL * fPoint, nDigits) * (nSL > 0 ); oRequest.tp = NormalizeDouble (oRequest.price - nTP * fPoint, nDigits) * (nTP > 0 ); } // определим допустимый тип заливки ордера (зависит от типа исполнения - Instant, Market, биржевое и т.д.) switch (( int ) SymbolInfoInteger (sSymbol, SYMBOL_FILLING_MODE )) { case SYMBOL_FILLING_FOK : oRequest.type_filling = ORDER_FILLING_FOK ; break ; case SYMBOL_FILLING_IOC : oRequest.type_filling = ORDER_FILLING_IOC ; break ; default : oRequest.type_filling = ORDER_FILLING_RETURN ; } oRequest.magic = nMagic; // проверка перед отправкой MqlTradeCheckResult oCheckResult= { 0 }; bool bCheck = OrderCheck (oRequest, oCheckResult); Print ( "Проверка заявки MarketOrder:" , " OrderCheck = " , bCheck, ", retcode = " , oCheckResult.retcode, ", balance = " , NormalizeDouble (oCheckResult.balance, 2 ), ", equity = " , NormalizeDouble (oCheckResult.equity, 2 ), ", margin = " , NormalizeDouble (oCheckResult.margin, 2 ), ", margin_free = " , NormalizeDouble (oCheckResult.margin_free, 2 ), ", margin_level = " , NormalizeDouble (oCheckResult.margin_level, 2 ), ", comment = " , oCheckResult.comment); // если проверка удачная - отправка заявки if (bCheck == true && oCheckResult.retcode == 0 ) { bool bResult = false ; // 3 попытки выставления ордера for ( int k = 0 ; k < 3 ; k++) { bResult = OrderSend (oRequest, oResult); if (bResult == true && oResult.retcode == TRADE_RETCODE_DONE ) break ; if (k == 2 ) break ; Sleep ( 100 ); } Print ( "Отправка заявки:" , " OrderSend = " , bResult, ", retcode = " , oResult.retcode, ", deal = " , oResult.deal, ", order = " , oResult.order, ", volume = " , NormalizeDouble (oResult.volume, 2 ), ", price = " , NormalizeDouble (oResult.price, _Digits ), ", bid = " , NormalizeDouble (oResult.bid, _Digits ), ", ask = " , NormalizeDouble (oResult.ask, _Digits ), ", comment = " , oResult.comment, ", request_id = " ,oResult.request_id); if (oResult.retcode == TRADE_RETCODE_DONE ) bRetVal = true ; } else if (oResult.retcode == TRADE_RETCODE_NO_MONEY ) { Print ( "Недостаточно денег для открытия позиции. Работа эксперта прекращена." ); ExpertRemove (); } return (bRetVal);} 강조 표시된 것을 다음과 같이 작성합니다. switch (( ENUM_SYMBOL_TRADE_EXECUTION ) SymbolInfoInteger (sSymbol, SYMBOL_TRADE_EXEMODE ); Alex2018 2017.01.24 09:58 #7224 안녕하세요. 후행 정지가 있는 조언자를 알려주시겠습니까? [삭제] 2017.01.24 10:06 #7225 Alexey Viktorov : 강조 표시된 것을 다음과 같이 작성합니다. switch (( ENUM_SYMBOL_TRADE_EXECUTION ) SymbolInfoInteger (sSymbol, SYMBOL_TRADE_EXEMODE ); 마음으로...!!! ) 도움이 되었습니다, 효과가 있었습니다! 고마워 알렉스!!!!!!!!! Alex2018 2017.01.24 12:18 #7226 안녕하세요. MT5에 대한 어드바이저 를 알려주지 마십시오. 후행 중지가 있는 어드바이저를 알려주지 않습니까? 바람직하게 는 SCALPER 또는 WORKING ON THE NEWS 또는 기타. 미리 감사드립니다 Vladimir Karputov 2017.01.24 12:22 #7227 Alex2018 : 안녕하세요. MT5에 대한 어드바이저 를 알려주지 마십시오. 후행 중지가 있는 어드바이저를 알려주지 않습니까? 바람직하게 는 SCALPER 또는 WORKING ON THE NEWS 또는 기타. 미리 감사드립니다 검색을 이용하셨나요? 여기에도 링크가 있습니다. 후행 중지가 있는 Expert Advisors act1on 2017.01.24 13:36 #7228 구매한 인디케이터 를 단말기에 설치하는 과정을 설명해주세요 구매했는데 활성화가 안되는데 뭐가 문제인가요? Vladimir Karputov 2017.01.24 13:51 #7229 act1on : 구매한 인디케이터 를 단말기에 설치하는 과정을 설명해주세요 구매했는데 활성화가 안되는데 뭐가 문제인가요? 지정: 시장 에서 구입? act1on 2017.01.24 14:42 #7230 Vladimir Karputov : 지정: 시장 에서 구입? 예 시장: https://www.mql5.com/ru/market/mt5/indicator 구매 후 "터미널에 설치"를 클릭 한 후 거래 터미널에 갔지만 아무 일도 일어나지 않았고 표시기가 나타나지 않았습니다 MQL5 Маркет: Индикаторы www.mql5.com Маркет - магазин программ для MetaTrader 5 и MetaTrader 4 1...716717718719720721722723724725726727728729730...1503 새 코멘트 사유: 취소 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
사람들은 내가 무엇을 잘못하고 있는지 알려줍니다. 왜 두 개의 표시기 iRSI, iCCI가 문제를 일으키지 않고 MA와 BB가 경고를 표시합니다(형식 변환 Indicator.mqh로 인한 데이터 손실 가능성 )
//| Indicator.mqh |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
// интерфейс к индикаторам.
class CIndicators
{
public :
double iRSI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift);
double iCCI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift);
double iBands ( string symbol, ENUM_TIMEFRAMES tf, int BBPeriod, int shift, double BBDeviation, ENUM_APPLIED_PRICE BBPrice );
double iMA ( string symbol, ENUM_TIMEFRAMES tf, int nMAPeriod, int shift, ENUM_MA_METHOD eMAMethod , ENUM_APPLIED_PRICE MAPrice);
};
// -Создадим экземпляр индикатора iRSI
double CIndicators:: iRSI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift)
{
//---
int hRSI = iRSI (symbol, tf, period, applied);
if (hRSI == INVALID_HANDLE )
return 0.0 ;
double rsi[];
CopyBuffer (hRSI, 0 , shift, 1 , rsi);
if ( ArraySize (rsi))
return rsi[ 0 ];
return 0.0 ;
//--Создадим экземпляр индикатора iCCI
}
//----------------------------------
double CIndicators:: iCCI ( string symbol, ENUM_TIMEFRAMES tf, int period, ENUM_APPLIED_PRICE applied, int shift)
{
int hCCI = iCCI ( Symbol (), PERIOD_CURRENT , 55 , PRICE_CLOSE );
if (hCCI == INVALID_HANDLE ) return 0.0 ;
double cci[];
ArrayResize (cci, 1 );
CopyBuffer (hCCI, 0 , 0 , 1 , cci);
return cci[ 0 ];
}
//--------------------------------------------------
// Создадим экземпляр индикатора ВВ
double CIndicators:: iBands ( string symbol, ENUM_TIMEFRAMES tf, int BBPeriod, int shift, double BBDeviation, ENUM_APPLIED_PRICE BBPrice)
{
int hBands = iBands ( Symbol (),tf,BBPeriod, 0 ,BBDeviation, PRICE_CLOSE );
if (hBands== INVALID_HANDLE ) return 0.0 ;
// Создадим массив значений верхней границы ВВ
double fBBUpper[];
ArrayResize (fBBUpper, true );
CopyBuffer (hBands, UPPER_BAND , 0 , 3 ,fBBUpper);
return fBBUpper[ 0 ];
// Создадим массив значений нижней границы ВВ
double fBBLower[];
ArraySetAsSeries (fBBLower, true );
CopyBuffer (hBands, LOWER_BAND , 0 , 3 ,fBBLower);
return fBBLower[ 0 ];
}
// Создадим экземпляр индикатора МА
double CIndicators:: iMA ( string symbol, ENUM_TIMEFRAMES tf, int nMAPeriod, int shift, ENUM_MA_METHOD eMAMethod , ENUM_APPLIED_PRICE MAPrice)
{
// получим его хэндл
int hMA= iMA ( Symbol (), PERIOD_CURRENT , nMAPeriod, 0 , MODE_EMA , PRICE_CLOSE );
if (hMA == INVALID_HANDLE ) return 0.0 ;
// Создадим массив значений МА,заполним тремя последними значениями мувинга.
double fMA[];
ArraySetAsSeries (fMA, true );
CopyBuffer (hMA, 0 , 0 , 3 ,fMA);
return fMA[ 0 ];
}
그리고 나는 또한 묻고 싶었습니다. 거래 요청 에서 변경해야 할 사항, 오류 10030이 나타났습니다, , 1년 전, EA 코드가 문제 없이 작동했는데 이제 다시 MQL5 변경 사항의 혁신을 읽고/검색해야 합니다.
// функция открытия позиции с рынка
bool MarketOrder( const string sSymbol, const ENUM_POSITION_TYPE eType, const double fLot, const int nSL = 0 , const int nTP = 0 , const ulong nMagic = 0 , const uint nSlippage = 1000 )
{
bool bRetVal = false ;
// запрос
MqlTradeRequest oRequest = { 0 };
MqlTradeResult oResult = { 0 };
double fPoint = SymbolInfoDouble (sSymbol, SYMBOL_POINT );
int nDigits = ( int ) SymbolInfoInteger (sSymbol, SYMBOL_DIGITS );
oRequest.action = TRADE_ACTION_DEAL ;
oRequest.symbol = sSymbol;
oRequest.volume = fLot;
oRequest.stoplimit = 0 ;
oRequest.deviation = nSlippage;
if (eType == POSITION_TYPE_BUY )
{
oRequest.type = ORDER_TYPE_BUY ;
oRequest.price = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_ASK ), nDigits);
oRequest.sl = NormalizeDouble (oRequest.price - nSL * fPoint, nDigits) * (nSL > 0 );
oRequest.tp = NormalizeDouble (oRequest.price + nTP * fPoint, nDigits) * (nTP > 0 );
}
if (eType == POSITION_TYPE_SELL )
{
oRequest.type = ORDER_TYPE_SELL ;
oRequest.price = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_BID ), nDigits);
oRequest.sl = NormalizeDouble (oRequest.price + nSL * fPoint, nDigits) * (nSL > 0 );
oRequest.tp = NormalizeDouble (oRequest.price - nTP * fPoint, nDigits) * (nTP > 0 );
}
// определим допустимый тип заливки ордера (зависит от типа исполнения - Instant, Market, биржевое и т.д.)
switch (( int ) SymbolInfoInteger (sSymbol, SYMBOL_FILLING_MODE ))
{
case SYMBOL_FILLING_FOK :
oRequest.type_filling = ORDER_FILLING_FOK ;
break ;
case SYMBOL_FILLING_IOC :
oRequest.type_filling = ORDER_FILLING_IOC ;
break ;
default :
oRequest.type_filling = ORDER_FILLING_RETURN ;
}
oRequest.magic = nMagic;
// проверка перед отправкой
MqlTradeCheckResult oCheckResult= { 0 };
bool bCheck = OrderCheck (oRequest, oCheckResult);
Print ( "Проверка заявки MarketOrder:" ,
" OrderCheck = " , bCheck,
", retcode = " , oCheckResult.retcode,
", balance = " , NormalizeDouble (oCheckResult.balance, 2 ),
", equity = " , NormalizeDouble (oCheckResult.equity, 2 ),
", margin = " , NormalizeDouble (oCheckResult.margin, 2 ),
", margin_free = " , NormalizeDouble (oCheckResult.margin_free, 2 ),
", margin_level = " , NormalizeDouble (oCheckResult.margin_level, 2 ),
", comment = " , oCheckResult.comment);
// если проверка удачная - отправка заявки
if (bCheck == true && oCheckResult.retcode == 0 )
{
bool bResult = false ;
// 3 попытки выставления ордера
for ( int k = 0 ; k < 3 ; k++)
{
bResult = OrderSend (oRequest, oResult);
if (bResult == true && oResult.retcode == TRADE_RETCODE_DONE )
break ;
if (k == 2 )
break ;
Sleep ( 100 );
}
Print ( "Отправка заявки:" ,
" OrderSend = " , bResult,
", retcode = " , oResult.retcode,
", deal = " , oResult.deal,
", order = " , oResult.order,
", volume = " , NormalizeDouble (oResult.volume, 2 ),
", price = " , NormalizeDouble (oResult.price, _Digits ),
", bid = " , NormalizeDouble (oResult.bid, _Digits ),
", ask = " , NormalizeDouble (oResult.ask, _Digits ),
", comment = " , oResult.comment,
", request_id = " ,oResult.request_id);
if (oResult.retcode == TRADE_RETCODE_DONE )
bRetVal = true ;
}
else if (oResult.retcode == TRADE_RETCODE_NO_MONEY )
{
Print ( "Недостаточно денег для открытия позиции. Работа эксперта прекращена." );
ExpertRemove ();
}
return (bRetVal);
}
그리고 나는 또한 묻고 싶었습니다. 거래 요청 에서 변경해야 할 사항, 오류 10030이 나타났습니다, , 1년 전, EA 코드가 문제 없이 작동했는데 이제 다시 MQL5 변경 사항의 혁신을 읽고/검색해야 합니다.
// функция открытия позиции с рынка
bool MarketOrder( const string sSymbol, const ENUM_POSITION_TYPE eType, const double fLot, const int nSL = 0 , const int nTP = 0 , const ulong nMagic = 0 , const uint nSlippage = 1000 )
{
bool bRetVal = false ;
// запрос
MqlTradeRequest oRequest = { 0 };
MqlTradeResult oResult = { 0 };
double fPoint = SymbolInfoDouble (sSymbol, SYMBOL_POINT );
int nDigits = ( int ) SymbolInfoInteger (sSymbol, SYMBOL_DIGITS );
oRequest.action = TRADE_ACTION_DEAL ;
oRequest.symbol = sSymbol;
oRequest.volume = fLot;
oRequest.stoplimit = 0 ;
oRequest.deviation = nSlippage;
if (eType == POSITION_TYPE_BUY )
{
oRequest.type = ORDER_TYPE_BUY ;
oRequest.price = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_ASK ), nDigits);
oRequest.sl = NormalizeDouble (oRequest.price - nSL * fPoint, nDigits) * (nSL > 0 );
oRequest.tp = NormalizeDouble (oRequest.price + nTP * fPoint, nDigits) * (nTP > 0 );
}
if (eType == POSITION_TYPE_SELL )
{
oRequest.type = ORDER_TYPE_SELL ;
oRequest.price = NormalizeDouble ( SymbolInfoDouble (sSymbol, SYMBOL_BID ), nDigits);
oRequest.sl = NormalizeDouble (oRequest.price + nSL * fPoint, nDigits) * (nSL > 0 );
oRequest.tp = NormalizeDouble (oRequest.price - nTP * fPoint, nDigits) * (nTP > 0 );
}
// определим допустимый тип заливки ордера (зависит от типа исполнения - Instant, Market, биржевое и т.д.)
switch (( int ) SymbolInfoInteger (sSymbol, SYMBOL_FILLING_MODE ))
{
case SYMBOL_FILLING_FOK :
oRequest.type_filling = ORDER_FILLING_FOK ;
break ;
case SYMBOL_FILLING_IOC :
oRequest.type_filling = ORDER_FILLING_IOC ;
break ;
default :
oRequest.type_filling = ORDER_FILLING_RETURN ;
}
oRequest.magic = nMagic;
// проверка перед отправкой
MqlTradeCheckResult oCheckResult= { 0 };
bool bCheck = OrderCheck (oRequest, oCheckResult);
Print ( "Проверка заявки MarketOrder:" ,
" OrderCheck = " , bCheck,
", retcode = " , oCheckResult.retcode,
", balance = " , NormalizeDouble (oCheckResult.balance, 2 ),
", equity = " , NormalizeDouble (oCheckResult.equity, 2 ),
", margin = " , NormalizeDouble (oCheckResult.margin, 2 ),
", margin_free = " , NormalizeDouble (oCheckResult.margin_free, 2 ),
", margin_level = " , NormalizeDouble (oCheckResult.margin_level, 2 ),
", comment = " , oCheckResult.comment);
// если проверка удачная - отправка заявки
if (bCheck == true && oCheckResult.retcode == 0 )
{
bool bResult = false ;
// 3 попытки выставления ордера
for ( int k = 0 ; k < 3 ; k++)
{
bResult = OrderSend (oRequest, oResult);
if (bResult == true && oResult.retcode == TRADE_RETCODE_DONE )
break ;
if (k == 2 )
break ;
Sleep ( 100 );
}
Print ( "Отправка заявки:" ,
" OrderSend = " , bResult,
", retcode = " , oResult.retcode,
", deal = " , oResult.deal,
", order = " , oResult.order,
", volume = " , NormalizeDouble (oResult.volume, 2 ),
", price = " , NormalizeDouble (oResult.price, _Digits ),
", bid = " , NormalizeDouble (oResult.bid, _Digits ),
", ask = " , NormalizeDouble (oResult.ask, _Digits ),
", comment = " , oResult.comment,
", request_id = " ,oResult.request_id);
if (oResult.retcode == TRADE_RETCODE_DONE )
bRetVal = true ;
}
else if (oResult.retcode == TRADE_RETCODE_NO_MONEY )
{
Print ( "Недостаточно денег для открытия позиции. Работа эксперта прекращена." );
ExpertRemove ();
}
return (bRetVal);
}
강조 표시된 것을 다음과 같이 작성합니다.
강조 표시된 것을 다음과 같이 작성합니다.
마음으로...!!! )
도움이 되었습니다, 효과가 있었습니다!
고마워 알렉스!!!!!!!!!
안녕하세요. MT5에 대한 어드바이저 를 알려주지 마십시오. 후행 중지가 있는 어드바이저를 알려주지 않습니까? 바람직하게 는 SCALPER 또는 WORKING ON THE NEWS 또는 기타. 미리 감사드립니다
구매한 인디케이터 를 단말기에 설치하는 과정을 설명해주세요 구매했는데 활성화가 안되는데 뭐가 문제인가요?
지정: 시장 에서 구입?
구매 후 "터미널에 설치"를 클릭 한 후 거래 터미널에 갔지만 아무 일도 일어나지 않았고 표시기가 나타나지 않았습니다