エラー、バグ、質問 - ページ 2380

 
bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = NULL)
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...
 
fxsaber:

すでに存在するロジックが破綻している。

こっちの方が面白い。

bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = "")
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...

コールを変更しなければ、コメントは以前と同様に上書きされます。

明示的にNULLを渡すと、既存のコメントをコピーします。

 
Slava:

すでにある論理を破っているのです。

そんな理屈は誰も使わない。インチキだからなおさらだ。

 
Slava:

すでに存在するロジックが破綻している。

こっちの方が面白い。

課題を変更しない場合、コメントは従来通り上書きされます。

明示的に NULL を渡すと、既存のコメントをコピーします。

ぜひご覧ください。

bool CTrade::PositionClose(const string symbol,const ulong deviation)

が、10回(!!)決済 しようとします :( デバッグ(Netting, Real, Opening)の際にも、そのような状況がありました。

2019.01.28 16:58:11.764 57384742        Si-3.19 buy     in      1.00    66492   98591318        -1.03   0.00    0.00            Price=66493
2019.01.28 17:01:14.586 57384818        Si-3.19 sell    out     1.00    66503   98591566        0.00    0.00    11.00           
2019.01.28 17:01:14.598 57384819        Si-3.19 sell    in      1.00    66502   98591567        -1.03   0.00    0.00            
2019.01.28 17:04:16.067 57385000        Si-3.19 buy     out     1.00    66514   98591891        0.00    0.00    -12.00          

ハイライトされた行は、ポジションを閉じるための2回目の試みです :)ログを見ればわかるように、完全に成功したわけではありません。

今のところ、私はそれを使っています。

bool CTrade::PositionClose(const ulong ticket,const ulong deviation)

コードでポジションを閉じる試みはすでに1回行われています。ポジションクローズの事実をユーザーがコントロールするのが正しいと思われます。10回の試行錯誤は万能ではない

 
Slava:

すでに存在するロジックが破綻している。

こっちの方が面白い。

コールを変更しなければ、コメントは以前と同様に上書きされます。

明示的にNULLを渡すと、既存のコメントをコピーします。

あるいは、もっと便利になるかもしれません。

bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = NULL)
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...

そして、それを必要とする人は、空の値で上書きします。デフォルト値がコピーされます。

 

開発者の皆様へ

端末は1983年に更新された。テスターでグラフィカルなオブジェクトを作成 する際に、おかしなエラーが発生します(縦線とトレンドラインを作成しています)。1981年当時は何もかもが普通だった。

今はエラー4001が出ます。

クリエーションコード

//+------------------------------------------------------------------+
//| Создаем трендовую линию на чарте                                                                                    |
//+------------------------------------------------------------------+
void DrawTrendLine(const string id,// Строковый идентификатор
                   const datetime t1,         // Время первой точки линии
                   const datetime t2,         // Время второй точки линии
                   const double price,// Цена обеих точек линии
                   const color clr            // Цвет линии
                   )
  {
//--- Формируем имя линии
   const string name=_prefix+id+TimeToString(t1)+"_"+TimeToString(t2);
//--- Сбрасываем код последней ошибки
   ResetLastError();
//---
//Print( __FUNCTION__,": Создаем тренд-линию "+name+": t1 = "+TimeToString( t1 )+", t2 = "+TimeToString( t2 )+", price = "+DoubleToString( price ) );
//--- Создаем объект, проверяем создание
   if(ObjectCreate(0,name,OBJ_TREND,0,t1,price,t2,price))   // Если объект создан
     {
      //--- Меняем свойства линий
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
      ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,false);
      ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
     }
   else                                                 // Если объект не создан
   Print(__FUNCTION__,": ОШИБКА #",GetLastError(),": Объект '"+name+"' не построен! t1 = "+TimeToString(t1)+", t2 = "+TimeToString(t2)+", price = "+DoubleToString(price));
  }
//+------------------------------------------------------------------+
//| Создаем вертикальную линию на чарте                              |
//+------------------------------------------------------------------+
void DrawVLine( const string id,         // Строковый идентификатор
               const datetime time      // Время
               )
  {
//--- Формируем имя линии
   const string name=_prefix+id+TimeToString(time);
//--- Сбрасываем код последней ошибки
   ResetLastError();
//--- Создаем объект, проверяем создание
   if(ObjectCreate(0,name,OBJ_VLINE,0,time,0))   // Если объект создан
     {
      //--- Меняем свойства линий
      ObjectSetInteger(0,name,OBJPROP_COLOR,_vLineClr);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
     }
   else                                                 // Если объект не создан
   Print(__FUNCTION__,": ОШИБКА #",GetLastError(),": Объект '"+name+"' не построен! t1 = "+TimeToString(time));
  }
 
また、テスターのコメントも表示されなくなりました。
 

開発者の方に質問です。

標準ライブラリのmytrade.PositionClose(conststring symbol,ulongdeviation=ULONG_MAX) 関数には、コメントパラメータがありません。

見落としでしょうか?

 

ここに書くのがより適切だと思われます。

https://www.mql5.com/ru/forum/302709#comment_10570043

Вопросы по проектам / папки Projects и Shared Projects
Вопросы по проектам / папки Projects и Shared Projects
  • 2019.02.08
  • www.mql5.com
Попытался начать работать с проектами, но что-то не ладится. Допустим, уже есть исходный файл с инклудами...
 
STATUS_TERMINAL_PATHを Documentationから削除しました。