ponochka : 안녕하세요! 다음을 수행할 수 있도록 도와주세요. 시장에 공개된 포지션 마다 목표 수익을 내야 하는데, 일반 포지션이 아닌 별도의 포지션이 필요합니다! 예: EURUSD가 열리고 설정에 $1의 목표 이익이 있고 도달하자마자 포지션이 닫힙니다. 따라서 각 통화 쌍은 총 이익에 따라가 아니라 자체적으로 작동해야 합니다!
모든 쌍의 총 이익에 대한 코드를 찾았습니다. 각 통화 쌍에 대해 별도로 다시 할 수 있도록 도와주세요 ...... 미리 감사합니다!
파헤치면 찾을 수 있습니다.
//+----------------------------------------------------------------------------+//| e-CloseByProfitPosInCurrency.mq4 |//| |//| Ким Игорь В. aka KimIV |//| http://www.kimiv.ru |//| |//| 22.04.2008 Советник закрывает только те позиции, у которых профит |//| в валюте депозита превысил некоторое заданное значение. |//+----------------------------------------------------------------------------+#property copyright"Ким Игорь В. aka KimIV"#property link"http://www.kimiv.ru"//------- Внешние параметры советника -----------------------------------------+string _P_Expert = "---------- Параметры советника" ;
externint NumberAccount = 0 ; // Номер торгового счётаexternstring symbol = "" ; // Торговый инструмент// "" - любой// "0" - текущийexternint Operation = - 1 ; // Торговая операция:// -1 - любая// 0 - OP_BUY// 1 - OP_SELLexterndouble Profit = 50 ; // Профит в валюте депозитаexternint MagicNumber = 0 ; // MagicNumberexternbool ShowComment = True; // Показывать комментарий//------- Глобальные переменные советника -------------------------------------+bool gbNoInit = False; // Флаг неудачной инициализацииint Slippage = 3 ; // Проскальзывание ценыint NumberOfTry = 5 ; // Количество торговых попытокbool UseSound = True; // Использовать звуковой сигналstring NameFileSound = "expert.wav" ; // Наименование звукового файлаcolor clCloseBuy = Blue; // Цвет значка закрытия покупкиcolor clCloseSell = Red; // Цвет значка закрытия продажи//------- Подключение внешних модулей -----------------------------------------+#include <stdlib.mqh> // Стандартная библиотека//+----------------------------------------------------------------------------+//| |//| ПРЕДОПРЕДЕЛЁННЫЕ ФУНКЦИИ |//| |//+----------------------------------------------------------------------------+//| expert initialization function |//+----------------------------------------------------------------------------+void init() {
gbNoInit = False;
if (!IsTradeAllowed()) {
Message( "Для нормальной работы советника необходимо\n" +
"Разрешить советнику торговать" );
gbNoInit=True; return ;
}
if (!IsLibrariesAllowed()) {
Message( "Для нормальной работы советника необходимо\n" +
"Разрешить импорт из внешних экспертов" );
gbNoInit=True; return ;
}
if (Operation<- 1 || Operation> 1 ) {
Message( "Недопустимое значение внешнего параметра Operation" );
gbNoInit=True; return ;
}
if (symbol!= "0" && symbol!= "" ) {
if (MarketInfo(StringUpper(symbol), MODE_BID)== 0 ) {
Message( "В обзоре рынка отсутствует символ " +symbol);
gbNoInit=True; return ;
}
}
if (!IsTesting()) {
if (IsExpertEnabled()) Message( "Советник будет запущен следующим тиком" );
else Message( "Отжата кнопка \"Разрешить запуск советников\"" );
}
}
//+----------------------------------------------------------------------------+//| expert deinitialization function |//+----------------------------------------------------------------------------+void deinit() { if (!IsTesting()) Comment ( "" ); }
//+----------------------------------------------------------------------------+//| expert start function |//+----------------------------------------------------------------------------+void start() {
if (gbNoInit) {
Comment ( "Не удалось инициализировать советник!" ); return ;
}
if (!IsTesting()) {
if (NumberAccount> 0 && NumberAccount!=AccountNumber()) {
Comment ( "Работа на счёте: " +AccountNumber()+ " ЗАПРЕЩЕНА!" );
return ;
} elseComment ( "" );
if (ShowComment) {
string st= "NumberAccount=" +DoubleToStr(NumberAccount, 0 )
+ " Symbol=" +IIFs(symbol== "0" , "All" , IIFs(symbol== "" , Symbol (), StringUpper(symbol)))
+ " Operation=" +IIFs(Operation< 0 , "All" , GetNameOP(Operation))
+ " Profit=" +DoubleToStr(Profit, 2 )+ " " +AccountCurrency()
+ " MagicNumber=" +DoubleToStr(MagicNumber, 0 )
+IIFs(ShowComment, " ShowComment" , "" )
;
Comment (st);
} elseComment ( "" );
}
ClosePosBySizeProfitInCurrency(StringUpper(symbol), Operation, MagicNumber, Profit);
}
//+----------------------------------------------------------------------------+//| |//| ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ |//| |//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание: Закрытие одной предварительно выбранной позиции |//+----------------------------------------------------------------------------+void ClosePosBySelect() {
bool fc;
color clClose;
double ll, pa, pb, pp;
int err, it;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
for (it= 1 ; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) break ;
while (!IsTradeAllowed()) Sleep ( 5000 );
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderType()==OP_BUY) {
pp=pb; clClose=clCloseBuy;
} else {
pp=pa; clClose=clCloseSell;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
if (UseSound) PlaySound (NameFileSound); break ;
} else {
err= GetLastError ();
if (err== 146 ) while (IsTradeContextBusy()) Sleep ( 1000 * 11 );
Print ( "Error(" ,err, ") Close " ,GetNameOP(OrderType()), " " ,
ErrorDescription(err), ", try " ,it);
Print (OrderTicket(), " Ask=" ,pa, " Bid=" ,pb, " pp=" ,pp);
Print ( "sy=" ,OrderSymbol(), " ll=" ,ll, " sl=" ,OrderStopLoss(),
" tp=" ,OrderTakeProfit(), " mn=" ,OrderMagicNumber());
Sleep ( 1000 * 5 );
}
}
} elsePrint ( "Некорректная торговая операция. Close " ,GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Закрытие тех позиций, у которых профит в валюте депозита |//| превысил некоторое значение |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| pr - профит |//+----------------------------------------------------------------------------+void ClosePosBySizeProfitInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , double pr= 0 ) {
int i, k= OrdersTotal ();
if (sy== "0" ) sy= Symbol ();
for (i=k- 1 ; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn< 0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()>pr) ClosePosBySelect();
}
}
}
}
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Возвращает наименование торговой операции |//+----------------------------------------------------------------------------+//| Параметры: |//| op - идентификатор торговой операции |//+----------------------------------------------------------------------------+string GetNameOP( int op) {
switch (op) {
case OP_BUY : return ( "Buy" );
case OP_SELL : return ( "Sell" );
case OP_BUYLIMIT : return ( "Buy Limit" );
case OP_SELLLIMIT: return ( "Sell Limit" );
case OP_BUYSTOP : return ( "Buy Stop" );
case OP_SELLSTOP : return ( "Sell Stop" );
default : return ( "Unknown Operation" );
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.02.2008 |//| Описание : Возвращает одно из двух значений взависимости от условия. |//+----------------------------------------------------------------------------+string IIFs( bool condition, string ifTrue, string ifFalse) {
if (condition) return (ifTrue); elsereturn (ifFalse);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Вывод сообщения в коммент и в журнал |//+----------------------------------------------------------------------------+//| Параметры: |//| m - текст сообщения |//+----------------------------------------------------------------------------+void Message( string m) {
Comment (m);
if ( StringLen (m)> 0 ) Print (m);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Возвращает строку в ВЕРХНЕМ регистре |//+----------------------------------------------------------------------------+string StringUpper( string s) {
int c, i, k= StringLen (s), n;
for (i= 0 ; i<k; i++) {
n= 0 ;
c=StringGetChar(s, i);
if (c> 96 && c< 123 ) n=c- 32 ; // a-z -> A-Zif (c> 223 && c< 256 ) n=c- 32 ; // а-я -> А-Яif (c== 184 ) n= 168 ; // ё -> Ёif (n> 0 ) s=StringSetChar(s, i, n);
}
return (s);
}
//+----------------------------------------------------------------------------+
아, 죄송합니다, 부주의합니다. 방금 악기 이름의 한 글자를 놓쳤습니다. 모든 것이 정상입니다 - 무지는 무지입니다.
이제 또 다른 질문이 생겼습니다. Double DJop1 = iOpen("DowJones30", PERIOD_H1 ,1)이 DowJones30이 아닌 다른 기호에서 시작된 이유는 올바른 값을 생성하는 반면 double DJbid = MarketInfo("DowJones30",MODE_BID)는 0.0을 생성하지만 DowJones30에서 잘 작동합니까?
안녕하세요! 다음을 수행할 수 있도록 도와주세요.
시장에 공개된 포지션 마다 목표 수익을 내야 하는데, 일반 포지션이 아닌 별도의 포지션이 필요합니다!
예: EURUSD가 열리고 설정에 $1의 목표 이익이 있고 도달하자마자 포지션이 닫힙니다.
따라서 각 통화 쌍은 총 이익에 따라가 아니라 자체적으로 작동해야 합니다!
모든 쌍의 총 이익에 대한 코드를 찾았습니다.
각 통화 쌍에 대해 별도로 다시 할 수 있도록 도와주세요 ...... 미리 감사합니다!
파헤치면 찾을 수 있습니다.
이중 iOpen (
끈 기호 , // 기호
정수 timeframe , // 기간
정수 옮기다 // 옮기다
);
가이드에 나와 있는 대로 악기의 상징적인 이름을 삽입하고(0도 아니고 NULL도 아님) 차트 테스터에서 실행하면 답이 0.0이 될까요? 이 경우 0과 NULL은 올바른 값을 생성합니다. 고맙습니다.
안녕하세요. 누군가가 무지한 사람에게 왜 기능을 설명하는지 설명합니다.
이중 iOpen (
끈 기호 , // 기호
정수 timeframe , // 기간
정수 옮기다 // 옮기다
);
가이드에 나와 있는 대로 악기의 상징적인 이름을 삽입하고(0도 아니고 NULL도 아님) 차트 테스터에서 실행하면 답이 0.0이 될까요? 이 경우 0과 NULL은 올바른 값을 생성합니다. 고맙습니다.
아, 죄송합니다, 부주의합니다. 방금 악기 이름의 한 글자를 놓쳤습니다. 모든 것이 정상입니다. 무지는 무지입니다.
아, 죄송합니다, 부주의합니다. 방금 악기 이름의 한 글자를 놓쳤습니다. 모든 것이 정상입니다 - 무지는 무지입니다.
이제 또 다른 질문이 생겼습니다. Double DJop1 = iOpen("DowJones30", PERIOD_H1 ,1)이 DowJones30이 아닌 다른 기호에서 시작된 이유는 올바른 값을 생성하는 반면 double DJbid = MarketInfo("DowJones30",MODE_BID)는 0.0을 생성하지만 DowJones30에서 잘 작동합니까?
감사합니다. 명확하지 않은 것이 있습니다. 이제 위치가 검은색이지만 0.25로 표시됩니다.
감사합니다. 명확하지 않은 것이 있습니다. 이제 위치가 검은색이지만 0.25로 표시됩니다.
맞아요, 카운트.
이 질문에 누가 도움을 줄 수 있습니까? https://www.mql5.com/ru/forum/160683/page897#comment_12221175 ?
이 질문에 누가 도움을 줄 수 있습니까? https://www.mql5.com/ru/forum/160683/page897#comment_12221175 ?
2019.06.27 14:20:36.265 EURUSD,H1 테스트: MyStructDouble.val = 123.456, MyStructDouble.ind = 123
2019.06.27 14:20:35.700 EURUSD,H1 테스트: MyStructDouble.val = 123.456, MyStructDouble.ind = 123
2019.06.27 14:20:35.427 EURUSD,H1 테스트: MyStructDouble.val = 123.456, MyStructDouble.ind = 123
2019.06.27 14:20:34.758 테스트 EURUSD,H1: 초기화됨
저것들. 템플릿 사용 에도 불구하고 여전히 유형을 할당해야 합니다.
A< double > MyStructDouble;
그리고 클래스의 경우 이러한 코드가 어떻게 생겼는지 템플릿을 클래스에 적용합니다.
저것들. 템플릿 사용 에도 불구하고 여전히 유형을 할당해야 합니다.
그리고 클래스의 경우 이러한 코드가 어떻게 생겼는지 템플릿을 클래스에 적용합니다.
C++는 MQL의 기본으로 사용되며 모든 C 유사 언어는 강력한 형식으로 지정됩니다. - Google에서 구출
내 예와 같이 일대일로 구조체를 클래스로 바꿉니다.