MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 898 1...891892893894895896897898899900901902903904905...1953 新しいコメント Alekseu Fedotov 2019.06.26 15:36 #8971 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 = "---------- Параметры советника" ; extern int NumberAccount = 0 ; // Номер торгового счёта extern string symbol = "" ; // Торговый инструмент // "" - любой // "0" - текущий extern int Operation = - 1 ; // Торговая операция: // -1 - любая // 0 - OP_BUY // 1 - OP_SELL extern double Profit = 50 ; // Профит в валюте депозита extern int MagicNumber = 0 ; // MagicNumber extern bool 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 ; } else Comment ( "" ); 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); } else Comment ( "" ); } 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 ); } } } else Print ( "Некорректная торговая операция. 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); else return (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-Z if (c> 223 && c< 256 ) n=c- 32 ; // а-я -> А-Я if (c== 184 ) n= 168 ; // ё -> Ё if (n> 0 ) s=StringSetChar(s, i, n); } return (s); } //+----------------------------------------------------------------------------+ novichok2018 2019.06.26 18:04 #8972 こんにちは。どなたか、未経験の方に、なぜ、関数 doubleiOpen( stringsymbol,// シンボル inttimeframe,// 期間 intshift// shift); マニュアルに書いてあるように、楽器のシンボル名を入れて(0でもNULLでもない)、チャート上のテスターで実行すると、0.0という答えが返ってくるのですが......?同時に0とNULLは正しい値を与えます。 ありがとうございました。 novichok2018 2019.06.26 18:11 #8973 novichok2018: こんにちは。どなたか、未経験の方に、なぜこの機能なのかを説明していただけませんか? doubleiOpen()文字列記号,// 記号inttimeframe,// 期間intshift// シフト); ハンドブックに書いてあるようにシンボリックツール名(0でもNULLでもない)を挿入して、テスターでチャート上で実行すると、0.0のレスポンスが返ってくるのですが?同時に0とNULLは正しい値を与えます。 ありがとうございました。 おっと、すみません、うっかりしてました:楽器の名前を一文字間違えただけです。いいんです、言語学者は言語学者なんですから。 novichok2018 2019.06.26 18:33 #8974 novichok2018: おっと、すみません、気を抜いてました:楽器名の一文字を見落としただけです。いいんです、言語学者は言語学者なんですから。 DowJones30ではない別の楽器で起動したdouble DJop1 = iOpen("DowJones30",PERIOD_H1,1)は正しい値を生成し、DowJones30で正常に動作するにもかかわらず、double DJbid = MarketInfo("DowJones30",MODE_BID) では 0.0 となるのは、何故ですか? nalyk 2019.06.27 00:07 #8975 Alekseu Fedotov: ありがとうございます!ポジションがプラスになりましたが、0.25と書いてあり、よくわかりません。 void OnTick() { //--- double drawdown=AccountProfit()*100/AccountBalance(); Comment("текущая просадка = ",drawdown); } ファイル: htygj.jpg 421 kb Alekseu Fedotov 2019.06.27 05:12 #8976 nalyk: ありがとうございます!今はポジションがプラス側になっていますが、0.25と書いてあるので、よくわかりません。 そうです、計算してみてください。 Seric29 2019.06.27 11:54 #8977 この質問https://www.mql5.com/ru/forum/160683/page897#comment_12221175、どなたか助けてください。 Igor Makanu 2019.06.27 12:21 #8978 Seric29: この質問https://www.mql5.com/ru/forum/160683/page897#comment_12221175、どなたか助けてください。 #property strict template<typename T>struct A { T val; int ind; }; A<double> MyStructDouble; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { MyStructDouble.val = 123.456; MyStructDouble.ind = 123; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { Print("MyStructDouble.val = ",MyStructDouble.val," , MyStructDouble.ind = ",MyStructDouble.ind); } //+------------------------------------------------------------------+ 2019.06.27 14:20:36.265 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123. 2019.06.27 14:20:35.700 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123. 2019.06.27 14:20:35.427 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123 2019.06.27 14:20:34.758 test EURUSD,H1:初期化されました。 Seric29 2019.06.27 15:13 #8979 Igor Makanu: つまり、テンプレートを適用 しても、タイプ A<double> MyStructDouble; また、クラスに対してテンプレートを適用する場合、このコードはどのようになるでしょうか。 Igor Makanu 2019.06.27 16:18 #8980 Seric29: つまり、テンプレートを適用 しても、タイプ また、クラスについては、テンプレートをクラスに適用することで、どのようなコードになるのでしょうか。 C++はMQLをベースにしており、Cのような言語はすべて厳密に型付けされます - googleが参考になります。 私の例と同じように、構造体をクラスに置き換えてください。 1...891892893894895896897898899900901902903904905...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
こんにちは!私が次のことをするのを手伝ってください:
市場のオープンポジションごとに目標利益を上げる必要がありますが、一般的なものではなく、個別のものです!
例:EURUSDがオープンし、その設定で1ドルの目標利益があり、それに達するとすぐに、ポジションはそれ自体をクローズしました。
したがって、各通貨ペアは、総利益ではなく、独自に機能する必要があります。
すべてのペアの総利益のコードを見つけました:
通貨ペアごとに個別にやり直すのを手伝ってください……よろしくお願いします!
あなたが掘れば、あなたはそれを見つけることができます。
doubleiOpen(
stringsymbol,// シンボル
inttimeframe,// 期間
intshift// shift
);
マニュアルに書いてあるように、楽器のシンボル名を入れて(0でもNULLでもない)、チャート上のテスターで実行すると、0.0という答えが返ってくるのですが......?同時に0とNULLは正しい値を与えます。 ありがとうございました。
こんにちは。どなたか、未経験の方に、なぜこの機能なのかを説明していただけませんか?
doubleiOpen()
文字列記号,// 記号
inttimeframe,// 期間
intshift// シフト
);
ハンドブックに書いてあるようにシンボリックツール名(0でもNULLでもない)を挿入して、テスターでチャート上で実行すると、0.0のレスポンスが返ってくるのですが?同時に0とNULLは正しい値を与えます。 ありがとうございました。
おっと、すみません、うっかりしてました:楽器の名前を一文字間違えただけです。いいんです、言語学者は言語学者なんですから。
おっと、すみません、気を抜いてました:楽器名の一文字を見落としただけです。いいんです、言語学者は言語学者なんですから。
DowJones30ではない別の楽器で起動したdouble DJop1 = iOpen("DowJones30",PERIOD_H1,1)は正しい値を生成し、DowJones30で正常に動作するにもかかわらず、double DJbid = MarketInfo("DowJones30",MODE_BID) では 0.0 となるのは、何故ですか?
ありがとうございます!ポジションがプラスになりましたが、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 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123.
2019.06.27 14:20:35.700 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123.
2019.06.27 14:20:35.427 test EURUSD,H1: MyStructDouble.val = 123.456 , MyStructDouble.ind = 123
2019.06.27 14:20:34.758 test EURUSD,H1:初期化されました。
つまり、テンプレートを適用 しても、タイプ
A<double> MyStructDouble;
また、クラスに対してテンプレートを適用する場合、このコードはどのようになるでしょうか。
つまり、テンプレートを適用 しても、タイプ
また、クラスについては、テンプレートをクラスに適用することで、どのようなコードになるのでしょうか。
C++はMQLをベースにしており、Cのような言語はすべて厳密に型付けされます - googleが参考になります。
私の例と同じように、構造体をクラスに置き換えてください。