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

 
Aliaksandr Kryvanos:
bool WriteToFile(int FileHandle,string DataToWrite)
  {
// Receives the number of bytes written to the file. Note that MQL can only pass
// arrays as by-reference parameters to DLLs
   int BytesWritten[1]={0};

// Get the length of the string
   int szData=StringLen(DataToWrite);

// Do the write
   WriteFile(FileHandle,DataToWrite,szData,BytesWritten,0);

// Return true if the number of bytes written matches the expected number
   return (BytesWritten[0] == szData);
  }

私は翻訳を新しい行にファイルに書きたいが、それは動作しません、このコードはここからですhttps://www.mql5.com/en/forum/118999

このコードは、各文字の後にスペースを持つ行を書き込みます、私は FileWrite( )の代替が必要ですが、それは動作します

こちらでお読み ください。
 
ありがとうございます。この記事https://www.mql5.com/ru/articles/1540 を使いたいのですが、やはり、kernel32.dll の WriteFile() を使って、行間変換で動作させたいのですが。
Файловые операции через WinAPI
Файловые операции через WinAPI
  • 2008.07.03
  • MetaQuotes Software Corp.
  • www.mql5.com
Исполнительная среда MQL4 основана на концепции безопасной "песочницы": чтение и запись средствами языка разрешены только в определенных папках. Это защищает пользователя MetaTrader 4 от потенциальной опасности испортить важные данные на жестком диске компьютера. Но иногда все же бывает необходимость покинуть безопасную зону. Как это сделать легко и правильно - об этом статья.
 
Artyom Trishkin:
関数とは何か、ぜひご一読ください。そうすれば、関数本体で 宣言された配列はローカルに、つまりプログラムの他の部分からは見えないところに置かれることが理解できるはずです。

つまり、3つの機能が必要です。

1) 宣言する場所

2)どちらで値をつけるか

3) データベースから削除するには、どちらを使用するのでしょうか?

だろう?

 
trader781:

つまり、3つの機能が必要です。

1) 宣言する場所

2)どちらで値をつけるか

3) データベースから削除するには、どちらを使用するのでしょうか?

ですよね?

ここを よく読んでください。
Учёт ордеров - Создание обычной программы - Учебник по MQL4
Учёт ордеров - Создание обычной программы - Учебник по MQL4
  • book.mql4.com
Учёт ордеров - Создание обычной программы - Учебник по MQL4
 
Alekseu Fedotov:
よく読んでみて ください。

よし、注文を2次元配列(チケット+ロット)に書き込むvoid関数を作ろう

写るんです

            if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
               Функция записи();
              }  
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно

 
trader781:

よし、注文を2次元配列(チケット+ロット)に書き込むvoid関数を作ろう

写るんです

            if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
               Функция записи();
              }  
и если массив локальный то каким образом я буду оттуда вытаскивать данные в текущую команду?
ретурн не возвращает данные массивов, а если засунуть туда выражение извлечения его будет не видно

配列の使い方を学ぶ以外に、なぜ配列にチケットやロットを書く必要があるのか教えてください。パソコンの電源を切れば、アレイごとクラッシュしてしまうのに、なぜ最初からこんなに信頼性のないものを作るのか。もちろん、配列の扱い方を学ぶことに意味があるのなら話は別ですが......)。
 
Vladimir Zubov:
教えてください、なぜチケットとロットを配列に書くのですか、配列の使い方を学ぶため以外にありますか?パソコンの電源を切ると、アレイごとクラッシュしてしまうのですが、そもそもなぜこんなに信頼性の低いものにしたのでしょうか?もちろん、配列の扱い方を学ぶことが目的であれば話は別ですが......)。

OK、簡単な方法で凹凸のあるグリッドに6つのオーダーを見つけるか、発券で8つのオーダーを見つけてください。

注文のグリッドがある限り必要だ、あとは転がせ。

さて、上のコードで述べた目標ですが
 
trader781:

OK、簡単な方法で凹凸のあるグリッドに6つのオーダーを見つけるか、発券で8つのオーダーを見つけてください。

注文のグリッドがある限り必要だ、あとは転がせ。

さて、私は上記のコードで目標を述べました。

ここでは、複数のパラメータでソートする機会があるので、2次元の配列が使われています。

私はあなたがそれを使用する方法を理解することを願って、そうでない場合 - フリーランスに)

double BPosMass[][2];
double SPosMass[][2];

void OnTick()
{
// Заполняем массивы
int b=-1,s=-1; // Объявим переменные с минусом
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic<0)) {
     if(OrderType()==OP_BUY) {
      b++;
       ArrayResize(BPosMass,b+1);
       BPosMass[b][0]= (int)OrderOpenPrice();// Для сортировки = можно сортировать по: OrderProfit(), OrderLots(), OrderTicket(), OrderOpenTime()
       BPosMass[b][1]= OrderTicket(); // Для чтения
     }
     if(OrderType()==OP_SELL) {
      s++;
       ArrayResize(SPosMass,s+1);
       SPosMass[s][0]= (int)OrderOpenPrice();// Для сортировки = можно сортировать по: OrderProfit(), OrderLots(), OrderTicket(), OrderOpenTime()
       SPosMass[s][1]= OrderTicket(); // Для чтения
     }
  }}} // конец записи массив

// Читаем отсортированный массив с тикетами
// Buy
  if(b>0) { // Если он не пустой и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива"
    ArraySort(BPosMass, WHOLE_ARRAY, 0, MODE_ASCEND); // Отсортируем по первому измерению
    // Работа с полученными данными
    Comment("Самый старый Buy тикет: ",    BPosMass[0][1],
            "\nПоследний Buy тикет: ",     BPosMass[b][1],
            "\nПредпоследний Buy тикет: ", BPosMass[b-1][1]
           );

  } // end Buy

// Sell
  if(s>0) { // Если он не пустой и больше двух элементов - [0], иначе будет ошибка: "Выход за пределы массива"
    ArraySort(SPosMass, WHOLE_ARRAY, 0, MODE_ASCEND); // Отсортируем по первому измерению
    // Работа с полученными данными
    Comment("Самый старый Sell тикет: ",    SPosMass[0][1],
            "\nПоследний Sell тикет: ",     SPosMass[s][1],
            "\nПредпоследний Sell тикет: ", SPosMass[s-1][1]
           );

  } // end Sell
  
// Конец функции OnTick()
}
 
Vitaly Muzichenko:

ここでは、複数のパラメータでソートする機会があるので、2次元の配列が使われています。

使い方を理解してほしい、理解できない場合はフリーランスへ)

double BPosMass[][];
あらかじめ無次元のものを取得する方法、空の値ではうまくいかない
 
trader781:
あらかじめ無次元化したものを取得する方法、空の値では動作しません。

そのままでは無次元ですが、2次元であり、2次元に無次元の要素を入れることができます。

とにかく何をやっているのか、自分のやった仕事の結果がどうあるべきか、考えているのか。それとも、自分で論理を組み立てているのでしょうか?