[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 247

 

sss2019、今対応する時間はありません、すみません

Zhunko:
間違っている。正しくは、上記の通りです。

気が向いたらすぐに修正して、そこの投稿のコードを編集します。

質問です。文字列へのポインタを 取得するにはどうすればよいですか?MQL4の文字列は、私が理解した限りでは、C++のlpsz です。しかし、文字列のアドレス そのものはどうやって取得するのでしょうか?

 
同じEAを異なるウィザードで動作させる方法を考えています。 問題は、ロックがあるとき、ロボットが他の注文に干渉することなく、この状況を別々に処理することです。例えば、あるポジションをBay(マジック001)でオープンしました。市場は私たちに不利になり、取引を閉じる代わりにマジック001で反対の取引がSellで始まり、ロボットはこの状況を清算します。しかし、状況を清算するのに長い時間待つことを避けるために、私は再びBayをオープンしたいのですが、すでにマジック(002)で、トレンドが成功しない場合はマジック(002)で再びSellでオープンするなど、取引を別のマジックの層として機能する方法については何かアドバイスをお願いいたします。
 
pasha5282:
もし、同じEAを異なるウィザードで動作させるアイデアがあれば、ロボットはロックが発生したときにこの状況を別々に処理し、他の注文に干渉しないようにする必要があります。例えば、ベイ(マジック001)で1つのポジションを持ちましたが、相場は我々に不利になり、取引を閉じる代わりにマジック001の売りで反対の取引が始まり、ロボットが状況を処理します。私は再びベイをオープンしたいのですが、マジック(002)で、トレンドが修正されない場合に、マジック(002)の反対の売り注文が再び開くといったように。 何か、取引を別のマジックで層として動作させるには? またはそれを実装するには? 。
int MagicNumber=001;
//---
if (OrdersTotal()>0) // проверяем, есть ли ордера
{  for (int i=OrdersTotal()-1; i>=0; i--) // перебор ордеров
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // выбирается ордер среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // проверяем - ордер по текущему символу?
         if (OrderMagicNumber()!=MagicNumber) continue; // проверяем - ордер с нужным магиком?
         //---
         if (OrderType()==OP_BUY) // если это открытая позиция на покупку, то ...
           {  // ... какие-то действия
                 return(0);
           }
         //---
         else
         if (OrderType()==OP_SELL) // если это открытая позиция на продажу, то ...
           {  // ... какие-то действия
                 return(0);
           }
}  }  }

必要なシンボルとマジックによる未決済注文と保留注文の カウンターの例

string _Symbol="AUDUSD";
int MagicNumber=555;
//---
int Opened_pos=0;
if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==_Symbol)
         {  if (OrderMagicNumber()==MagicNumber)
            Opened_pos++;
}  }  }  }
 

なぜかテスト中に端末が不具合を起こしてしまいました。今、電源を入れると、150mbほどのメモリを使い始めてハングアップしてしまう。再インストールしようと思ったが、その前にすべてのファイルを移動した。フォルダを開いてみると、作成したファイルがすべてあるわけではないことがわかった。残りはどこだ?


 
silhouette:

なぜかテスト中に端末が不具合を起こしてしまいました。今、電源を入れると、150mbほどのメモリを使い始めてハングアップしてしまう。再インストールしようと思ったが、その前にすべてのファイルを移動した。フォルダを開いてみると、作成したファイルがすべてあるわけではないことがわかった。他のメンバーは?

左のスクリーンショットはMQL5で、4ではありません。
 
gyfto:

sss2019、今対応する時間はありません、すみません


気が向いたらすぐに修正して、そこの投稿のコードを編集します。

質問です。文字列へのポインタを取得するにはどうすればよいですか?MQL4の文字列は、私が理解した限りでは、C++のlpsz です。しかし、文字列自体のアドレスは どのように取得すればよいのでしょうか?

MQL4では方法がありません。DLLに文字列を渡して、そのアドレスをINTで返せばよい。
 
paladin80:
左のスクリーンショットは、4ではなくMQL5です。

いいえ、4枚目です。ただ、4つ目のファイルをクリックすると、なぜか5つ目のファイルまで開いてしまうのです
 
silhouette:
いいえ、4枚目です。ただ、4番目のファイルをクリックすると、なぜか5番目まで開いてしまうのです

MetaEditor for 5を開き、左のウィンドウで「ナビゲータ」→フォルダ上でマウスの右クリック→「フォルダを開く」で、フォルダの中から検索してみてください。



 
Zhunko:
MQL4では方法がありません。DLLに文字列を渡して、そのアドレスをINTで返すことができます。 。

//C++
#include "stdafx.h"
#include <windows.h>
#define MT4_EXPFUNC __declspec(dllexport)
struct MqlStr {
   int               len;
   char             *string;
  };
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    return TRUE;
}
MT4_EXPFUNC int __stdcall GetStrAddress(const char *str) {    
    MqlStr* s = (MqlStr*)str;
    return (int)s->string; 
}

//MQL4

#import "StrAddress.dll"
int GetStrAddress(string str);//на входе имя инициализированной строки, на выходе её адрес
#import
//объявляем:
string s="something";
int address;
//пример использования:
int start(){
   address=GetStrAddress(s);
   Print(" адрес s равен " s);
}

他の人が同じように悩まないように、zipで圧縮したプロジェクト 全体を添付しています。ソース付きで、他の人にもウイルスでないことがわかるように。VC++ 6.0でコンパイルされたものと、ゴミのようなものを確認する時間がありませんでした。StrAddress.dllはDebugフォルダーにあります。

ファイル:
straddress.zip  984 kb
 
paladin80:

MetaEditor for 5を開き、左ウィンドウの「ナビゲータ」→フォルダ上でマウス右クリック→「フォルダを開く」で、フォルダの中から検索してみてください。



ありがとうございます、でもmt4からは何も出てきません。searchを使用したところ、以下のアドレスにすべてのファイルが見つかりました。

C:\UsersQwerAppDataLocalLirtualStoreProgram Files﹑MetaTrader 4﹑include

以前はちゃんと保存されていたので、正直なところ、どうしてそこにあるのかわからない。