MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1551

 
natawik:

皆さんこんにちは、助けてください

こんな悩みがあるんです。私はmql5からvpcを 購入し、すべてが正常に動作している、自分自身にエキスパートをインストールし、8チャートを設定し、エキスパートを設定します。そして、全部をvpcに転送しました。

メタトレードは私のものではなかったので、パソコンからアンインストールしました。

そして今、パソコンから入るとき。

すべてがうまくいく、エキスパート。動作はするのですが、設定を変更するために見ることができません。EAやスケジュールをパソコンから管理できるように戻すにはどうしたらよいですか?

ありがとうございました。

この場合、プロファイルを保存しておく必要があります。UPUの下に後でアップロードするため。

 

レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか?

コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。

どう保存してもこの問題は解決しない。

 
законопослушный гражданин:

レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか?

コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。

どう保存しても、この問題が解消されない。

アップロードする前、またはエクスポートしたファイルを開く前に、Excellで整数部と分数 部の区切り文字をドットに置き換えてください。

 
законопослушный гражданин:

レポートからすべてのデータを歪みなくexelにエクスポートする方法を知っている人はいますか?

コピーすると、「利益」列のデータの一部が日付としてエクスポートされます。

どうやって保存しようとしても、問題が解消されない。

だから

 
SGarnov:

ストップの発動回数も考慮したほうがいいかもしれませんね。例えば、EAは 履歴からストップを見つけ、2つあれば両方を足して3つ、4つにするはずですが、それはすべて外部設定「ストップロスの数」によって決まります。

あなたの場合だけでなく、ほとんどの場合、クローズした注文を検索して取引履歴を見るのではなく、オープンした注文のチケットを配列で保持しておくのがベストです。定期的に配列を見て、この注文が単純な条件によって閉じられたかどうかをチェックします。

if(OrderCloseTime() != 0) // значит ордер закрылся…

注文が決済された場合、チケットで選択し、利益で決済されたかどうかを確認することができます。また、オープンポジションからストップまでの距離を確認し、お母さんの許す範囲でこの距離にプラスしていくのもよいでしょう。

これらの操作の後、配列のサイズを 0にリセットし、ループ内の現在の瞬間に開いた注文のティックで新たに埋め、配列のサイズを増加させる必要があります。

 
Vladislav Andruschenko:

この時のために、プロファイルを保存しておく必要があります。UPUの下に後でアップロードするため。

VPNを切って全部元に戻して、グラフィックもEAも全部転送したらどうだろう?
古いデータはないんでしょう?
 

こんにちは

コードの理解を助けてください

クラスがあるコードを添付し、すべてうまく動作していますが

クラスからいくつかの関数を自分自身の別の関数に接続し、エラーを書きたい

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
 
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);
  }
//+------------------------------------------------------------------+
 
MakarFX:

問題ないようです。試してみる、訊いてみる...

ありがとうございます、来週こそはEAの正しさを書きます、今日は金曜日でもう相場のエントリー 価格は探していません。

 
natawik:
VPNをオフにして、すべてを元に戻し、VPNをオンにして、グラフィックとExpert Advisorをすべて転送したらどうでしょうか。
古いデータはないんでしょう?
PCをセットアップして端末を設定し、すべてを移行して作業を続け、グラフィックを変更するなどしているうちに、ドカンと何かを変更しなければならない...そんな問題によく遭遇するのです。もう一度、やり直さなければならない。