MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1551 1...154415451546154715481549155015511552155315541555155615571558...1953 新しいコメント Vladislav Andruschenko 2021.07.30 10:21 #15501 natawik:皆さんこんにちは、助けてくださいこんな悩みがあるんです。私はmql5からvpcを 購入し、すべてが正常に動作している、自分自身にエキスパートをインストールし、8チャートを設定し、エキスパートを設定します。そして、全部をvpcに転送しました。メタトレードは私のものではなかったので、パソコンからアンインストールしました。そして今、パソコンから入るとき。すべてがうまくいく、エキスパート。動作はするのですが、設定を変更するために見ることができません。EAやスケジュールをパソコンから管理できるように戻すにはどうしたらよいですか?ありがとうございました。 この場合、プロファイルを保存しておく必要があります。UPUの下に後でアップロードするため。 законопослушный гражданин 2021.07.30 10:45 #15502 レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか? コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。 どう保存してもこの問題は解決しない。 Alexey Viktorov 2021.07.30 10:55 #15503 законопослушный гражданин:レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか?コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。どう保存しても、この問題が解消されない。 アップロードする前、またはエクスポートしたファイルを開く前に、Excellで整数部と分数 部の区切り文字をドットに置き換えてください。 Tretyakov Rostyslav 2021.07.30 10:57 #15504 законопослушный гражданин:レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか?コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。どうやって保存しようとしても、問題が解消されない。 だから Alexey Viktorov 2021.07.30 11:04 #15505 SGarnov:ストップの発動回数も考慮したほうがいいかもしれませんね。例えば、EAは 履歴からストップを見つけ、2つあれば両方を足して3つ、4つにするはずですが、それはすべて外部設定「ストップロスの数」によって決まります。 あなたの場合だけでなく、ほとんどの場合、クローズした注文を検索して取引履歴を見るのではなく、オープンした注文のチケットを配列で保持しておくのがベストです。定期的に配列を見て、この注文が単純な条件によって閉じられたかどうかをチェックします。 if(OrderCloseTime() != 0) // значит ордер закрылся… 注文が決済された場合、チケットで選択し、利益で決済されたかどうかを確認することができます。また、オープンポジションからストップまでの距離を確認し、お母さんの許す範囲でこの距離にプラスしていくのもよいでしょう。 これらの操作の後、配列のサイズを 0にリセットし、ループ内の現在の瞬間に開いた注文のティックで新たに埋め、配列のサイズを増加させる必要があります。 Natalja Moisejonok 2021.07.30 11:45 #15506 Vladislav Andruschenko:この時のために、プロファイルを保存しておく必要があります。UPUの下に後でアップロードするため。 VPNを切って全部元に戻して、グラフィックもEAも全部転送したらどうだろう?古いデータはないんでしょう? Mikhail Rudyk 2021.07.30 12:07 #15507 こんにちは コードの理解を助けてください クラスがあるコードを添付し、すべてうまく動作していますが クラスからいくつかの関数を自分自身の別の関数に接続し、エラーを書きたい 例 void OpenHandPosition(int tp) { string lot=0.01 bool response = actionTrade.ManageOrderSend(tp, lt, 0, 0, 0, 0, 0);// } 次のように動作します。 で、これがうまくいかない void OpenHandPosition(int tp) { int stopLoss = GetStopLossPoints(size); int takeProfit = GetTakeProfitPoints(); bool response = actionTrade.ManageOrderSend(tp, lt , stopLoss, takeProfit, 0, 0, 0); } この機能は void StrategyTrader::DoEntryTrade(TradeDirection tradeDir) で、これはない OpenHandPosition(int tp) 手つだい ファイル: test.mq5 21 kb Tretyakov Rostyslav 2021.07.30 12:14 #15508 SGarnov:実装が難しいという結論に達しました。あなたのコードの方がずっとシンプルで明確で論理的ですが、......なんとなく腑に落ちませんね。大切なのは、あきらめないことです。 問題ないようです。試してみる、訊いてみる... //+------------------------------------------------------------------+ //| SGarnov.v2.1.mq4 | //| Copyright 2020, DrMak. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, DrMak." #property link "https://www.mql5.com" #property version "1.00" #property strict //--- input parameters input int T_Profit = 2; // Коэффициент Take Profit input int S_Loss = 200; // Уровень Stop Loss input double O_Lots = 0.01; // Лоты input int SL_Count = 2; // Количество убыточных ордеров input int Slippage = 30; // Проскальзывание input int N_Magic = 888; // Magic datetime T_Start; double sl_price,tp_price,t_profit,s_loss; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- Comment(""); //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- t_profit = S_Loss*T_Profit * Point(); tp_price = NormalizeDouble(t_profit+GetPointLoss(), Digits); //--- s_loss = MathMax(S_Loss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point(); sl_price = NormalizeDouble(s_loss, Digits); //--- // Удаляем отложенный ордер после профита if(CountOrders(-1)==1) DeletePending(); //--- // Проверяем серию убыточных ордеров if(CountOrders(-1)==1&&GetLossOrders()<SL_Count) { // Устанавливаем отложенный ордер SendPending(); } //--- // Проверяем наличие ордеров if(CountOrders(-1)>0) { // Устанавливаем StopLoss/TakeProfit ModifyOrder(); } //--- int a=(int)TimeStart(); int b=GetLossOrders(); int c=(int)((GetPointLoss()+t_profit)/Point); Comment("Время начала цикли: ",TimeToStr(a,TIME_SECONDS),"\n", "Серия StopLoss ордеров: ",b,"\n", "Размер TakeProfita: ",c); } //+------------------------------------------------------------------+ //| Модификация ордера | //+------------------------------------------------------------------+ void ModifyOrder() { double op=0; for(int pos=OrdersTotal()-1;pos>=0;pos--) { if(OrderSelect(pos,SELECT_BY_POS)==true) { if(OrderSymbol()==_Symbol) { if(OrderStopLoss()==0) { if(OrderType()==OP_BUY) {op=OrderOpenPrice(); if(OrderModify(OrderTicket(), OrderOpenPrice(), op-sl_price, op+tp_price, OrderExpiration())) {Print("Ордер модифицирован");} else {Print("Ошибка модификации ордера:", GetLastError());} } if(OrderType()==OP_SELL) {op=OrderOpenPrice(); if(OrderModify(OrderTicket(), OrderOpenPrice(), op+sl_price, op-tp_price, OrderExpiration())) {Print("Ордер модифицирован");} else {Print("Ошибка модификации ордера:", GetLastError());} } } } } } } //+------------------------------------------------------------------+ //| Подсчет ордеров по типу | //+------------------------------------------------------------------+ //| 0 - ордера типа BUY 1 - ордера типа SELL | //| 2 - ордера типа BUYLIMIT 3 - ордера типа SELLLIMIT | //| 4 - ордера типа BUYSTOP 5 - ордера типа SELLSTOP | //| 6 - ордера типа Balance -1 - Все типы ордеров | //+------------------------------------------------------------------+ int CountOrders(int or_ty=-1) { int cnt=0; for(int pos=OrdersTotal()-1;pos>=0;pos--) { if(OrderSelect(pos,SELECT_BY_POS)==true) { if(OrderSymbol()==_Symbol) { if(or_ty<0 || or_ty==OrderType()) cnt++; } } } return(cnt); } //+------------------------------------------------------------------+ //| Установка отложенного ордера | //+------------------------------------------------------------------+ void SendPending() { double op=0; for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS)==true) { if(OrderSymbol()==_Symbol) { if(OrderType()==OP_BUY) { if(OrderStopLoss() != 0) { op=OrderStopLoss(); if(OrderSend(_Symbol,OP_SELLSTOP,O_Lots,op,Slippage,0,0,NULL,N_Magic)) {Print("Отложенный ордер установлен");} else {Print("Ошибка установки отложеного одера: ", GetLastError());} } } if(OrderType()==OP_SELL) { if(OrderStopLoss() != 0) { op=OrderStopLoss(); if(OrderSend(_Symbol,OP_BUYSTOP,O_Lots,op,Slippage,0,0,NULL,N_Magic)) {Print("Отложенный ордер установлен");} else {Print("Ошибка установки отложеного одера: ", GetLastError());} } } } } } } //+------------------------------------------------------------------+ //| Возвращает пункты убытка закрытых ордеров с начала цикла | //+------------------------------------------------------------------+ double GetPointLoss() { double result=0,b=0,s=0;; int i=OrdersHistoryTotal(); for(int pos=0; pos<i; pos++) { if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==_Symbol) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(OrderProfit()<0) { if(OrderCloseTime()>=TimeStart()) { if(OrderType()==OP_BUY) { b+=OrderOpenPrice()-OrderClosePrice(); } if(OrderType()==OP_SELL) { s+=OrderClosePrice()-OrderOpenPrice(); } } } } } } } return(b+s); } //+------------------------------------------------------------------+ //| Удаление отложенного ордера | //+------------------------------------------------------------------+ void DeletePending() { for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS)==true) { if(OrderSymbol()==_Symbol) { if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) { if(OrderMagicNumber() == N_Magic) { if(OrderDelete(OrderTicket())) {Print("Отложенный ордер удален");} else {Print("Ошибка удаления отложеного одера: ", GetLastError());} } } } } } } //+------------------------------------------------------------------+ //| Возвращает время начала цикла | //+------------------------------------------------------------------+ datetime TimeStart() { datetime ts1=0,ts2=0; if(OrdersTotal()!=0) { for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS)) { if(OrderMagicNumber()!=N_Magic) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(OrderSymbol()==_Symbol) { if(ts1<OrderOpenTime()) { ts1=OrderOpenTime(); } } } } } } for(int pos=0; pos<OrdersHistoryTotal(); pos++) { if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)) { if(OrderMagicNumber()!=N_Magic) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(OrderSymbol()==_Symbol) { if(ts2<OrderOpenTime()) { ts2=OrderOpenTime(); } } } } } } } return(MathMax(ts1,ts2)); } //+------------------------------------------------------------------+ //| Возвращает кол-во серии убыточных ордеров | //+------------------------------------------------------------------+ int GetLossOrders() { int cnt=0; int i=OrdersHistoryTotal(); for(int pos=0; pos<i; pos++) { if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)) { if((OrderSymbol()==_Symbol)) { if(OrderCloseTime()>=TimeStart()) { if(OrderProfit()<0) cnt++; } } } } return(cnt); } //+------------------------------------------------------------------+ SGarnov 2021.07.30 12:32 #15509 MakarFX:問題ないようです。試してみる、訊いてみる... ありがとうございます、来週こそはEAの正しさを書きます、今日は金曜日でもう相場のエントリー 価格は探していません。 Vladislav Andruschenko 2021.07.30 12:38 #15510 natawik: VPNをオフにして、すべてを元に戻し、VPNをオンにして、グラフィックとExpert Advisorをすべて転送したらどうでしょうか。古いデータはないんでしょう? PCをセットアップして端末を設定し、すべてを移行して作業を続け、グラフィックを変更するなどしているうちに、ドカンと何かを変更しなければならない...そんな問題によく遭遇するのです。もう一度、やり直さなければならない。 1...154415451546154715481549155015511552155315541555155615571558...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
皆さんこんにちは、助けてください
こんな悩みがあるんです。私はmql5からvpcを 購入し、すべてが正常に動作している、自分自身にエキスパートをインストールし、8チャートを設定し、エキスパートを設定します。そして、全部をvpcに転送しました。
メタトレードは私のものではなかったので、パソコンからアンインストールしました。
そして今、パソコンから入るとき。
すべてがうまくいく、エキスパート。動作はするのですが、設定を変更するために見ることができません。EAやスケジュールをパソコンから管理できるように戻すにはどうしたらよいですか?
ありがとうございました。
この場合、プロファイルを保存しておく必要があります。UPUの下に後でアップロードするため。
レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか?
コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。
どう保存してもこの問題は解決しない。
レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか?
コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。
どう保存しても、この問題が解消されない。
アップロードする前、またはエクスポートしたファイルを開く前に、Excellで整数部と分数 部の区切り文字をドットに置き換えてください。
レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか?
コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。
どうやって保存しようとしても、問題が解消されない。
だから
ストップの発動回数も考慮したほうがいいかもしれませんね。例えば、EAは 履歴からストップを見つけ、2つあれば両方を足して3つ、4つにするはずですが、それはすべて外部設定「ストップロスの数」によって決まります。
あなたの場合だけでなく、ほとんどの場合、クローズした注文を検索して取引履歴を見るのではなく、オープンした注文のチケットを配列で保持しておくのがベストです。定期的に配列を見て、この注文が単純な条件によって閉じられたかどうかをチェックします。
注文が決済された場合、チケットで選択し、利益で決済されたかどうかを確認することができます。また、オープンポジションからストップまでの距離を確認し、お母さんの許す範囲でこの距離にプラスしていくのもよいでしょう。
これらの操作の後、配列のサイズを 0にリセットし、ループ内の現在の瞬間に開いた注文のティックで新たに埋め、配列のサイズを増加させる必要があります。
この時のために、プロファイルを保存しておく必要があります。UPUの下に後でアップロードするため。
こんにちは
コードの理解を助けてください
クラスがあるコードを添付し、すべてうまく動作していますが
クラスからいくつかの関数を自分自身の別の関数に接続し、エラーを書きたい
例
次のように動作します。
で、これがうまくいかない
この機能は
void StrategyTrader::DoEntryTrade(TradeDirection tradeDir)
で、これはない
OpenHandPosition(int tp)
手つだい
実装が難しいという結論に達しました。あなたのコードの方がずっとシンプルで明確で論理的ですが、......なんとなく腑に落ちませんね。大切なのは、あきらめないことです。
問題ないようです。試してみる、訊いてみる...
問題ないようです。試してみる、訊いてみる...
ありがとうございます、来週こそはEAの正しさを書きます、今日は金曜日でもう相場のエントリー 価格は探していません。
VPNをオフにして、すべてを元に戻し、VPNをオンにして、グラフィックとExpert Advisorをすべて転送したらどうでしょうか。