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 законопослушный гражданин #:ありがとうございます!) 新年あけましておめでとうございます!) いつでもOK! 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 #: ありがとうございます。 getInfoLastPos()にvoidを使った のですが・・・。 1...183118321833183418351836183718381839184018411842184318441845...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
は組み立てられたようですが、テスターでは一度しか動作しません
もう一回テストすると、どの案件も開かなくなる
最初のテストをすると、間隔は設定されますが、ロットを開始ロットに戻すと、それ以上取引を開始しません。
どこで間違えたのでしょうか?
は組み立てられたようですが、テスターでは一度しか動作しません
もう一回テストすると、どの案件も開かなくなる
最初のテストをすると、間隔は設定されますが、ロットを開始ロットに戻すと、それ以上取引を開始しません。
どこで間違えたのか?
機能をクリックする前にf1を押す回数が増え、読みやすくなりました。
注文は、OrderSelect()関数で事前に選択されている必要があります。
OrderLots()関数に対してです。
酔ってすみません。
新年あけましておめでとうございます。
は組み立てられたようですが、テスターでは一度しか動作しません
もう一回テストすると、どの案件も開かなくなる
最初のテストをすると、間隔は設定されますが、ロットを開始ロットに戻すと、それ以上取引を開始しません。
どこが悪いんだろう
発表者
この機能をお試しください。
ギフト
この機能をお試しください。
ありがとうございました!)ハッピーホリデー)
そうですね、できるだけシンプルに、アプリに差し込めば動くようにしました。
ありがとうございます!) 新年あけましておめでとうございます!)
いつでもOK!
揃えたつもりが、テスターで一度しか動作しない
どこで間違えたんだろう?
このような問題を解決するには、デバッガが適しています。使用することをお勧めします
そして、TestLibのコンテキストでmql5で呼び出すのですか?TestLib::TestClass::Inc() とする必要があります。
ありがとうございました。
は組み立てられたようですが、テスターでは一度しか動作しません
どこで間違えたのだろう?ありがとうございます。
getInfoLastPos()にvoidを使った のですが・・・。