[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 247

 

sss2019,现在没时间处理了,抱歉

Zhunko:
错了。正确,如上所示。

一旦我有时间,我就会修复它,并在那里的帖子中编辑代码。

问题。我如何获得 一个指向字符串的指针?据我了解,MQL4的字符串 是C++lpsz。但我们如何获得字符串地址 本身呢?

 
我有一个想法,如何使一个相同的EA在不同的向导下工作。 问题是,当有一个锁,机器人将分别处理这种情况,而不干扰其他订单。例如,我们有一个在海湾(魔法001)开的头寸,市场对我们不利,而不是关闭交易,相反的交易在卖出(魔法001)打开,机器人将清算这种情况,但为了避免长时间等待清算的情况,我想再次打开海湾,但已经用魔法(002),如果趋势不成功,用魔法(002)的锁将再次打开卖出(002),等等,你能告诉如何使交易在不同魔法对下工作?
 
pasha5282:
如果我有一个想法,如何使一个相同的EA在不同的向导下工作。当发生锁定时,机器人应该单独处理这种情况,不干扰其他订单。例如,我们有一个在Bay(魔法001)开立的头寸,市场对我们不利,而不是关闭交易,相反的交易在Sell(魔法001)开立,机器人会处理这种情况,我想再次开立Bay,但用魔法(002),以避免长时间等待处理它,如果趋势不成功,用魔法(002)的Sell锁将再次打开,等等。 有没有建议如何使交易作为不同魔法的一层工作? 也许有人遇到过?或者如何实施?
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++;
}  }  }  }
 

由于某些原因,终端在测试过程中出现了故障。现在当你打开它时,它开始使用大约150 mb的内存并挂起。本来打算重新安装,但在这样做之前转移了我所有的文件。当我打开这些文件夹时,我发现并非所有我创建的文件都在那里。其余的人在哪里?


 
silhouette:

由于某些原因,终端在测试过程中出现了故障。现在当你打开它时,它开始使用大约150 mb的内存并挂起。本来打算重新安装,但在这样做之前转移了我所有的文件。当我打开这些文件夹时,我发现并非所有我创建的文件都在那里。其他的人在哪里?

左边的截图是MQL5而不是4。
 
gyfto:

sss2019,现在没时间处理了,抱歉


一旦我有时间,我就会修复它,并在那里的帖子中编辑代码。

问题。我如何获得一个指向字符串的指针?据我了解,MQL4的字符串 是C++lpsz。但我怎样才能得到字符串本身的地址

在MQL4中没有办法做到这一点。你可以将字符串传递给DLL,并将地址作为INT返回。
 
paladin80:
左边的截图是MQL5,而不是4。

不,是第四个。只是当你点击第四个文件时,由于某种原因,它通过第五个文件打开。
 
silhouette:
不,是第四个。只是,第四个文件,当点击时,通过第五个文件打开,出于某种原因

打开MetaEditor 5,在左边的窗口 "Navigator"->在一个文件夹上点击鼠标右键->"Open folder",在文件夹中尝试搜索。



 
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);
}

为了不让其他人遭受同样的痛苦,我附上了整个压缩的项目。有来源,以便其他人可以看到它不是一个病毒。我没有时间去检查哪些是由VC++ 6.0编译的,哪些是垃圾。StrAddress.dll在Debug文件夹中。

附加的文件:
straddress.zip  984 kb
 
paladin80:

打开MetaEditor for 5,在左边的窗口 "Navigator"->鼠标右键点击一个文件夹->"Open folder",在文件夹中尝试搜索。



谢谢,但那里没有出现mt4的任何内容。使用了搜索,在以下地址找到了所有文件。

C:\Users\Qwer\AppData\Local\VirtualStore\Program Files\MetaTrader 4\experts\include

说实话,我不知道它们是怎么到那里的,因为它们之前被妥善保存了。