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

 
Desead:
伙计们,以前在编辑器中,当你把鼠标悬停在一个保留字上并按下f1时,在底部会打开一个窗口,上面有该功能的描述,现在我没有这个功能了。有什么问题吗?
之前你按了CTRL+F1。
 
谁能告诉我如何使结果总是积极的?(买入手数-卖出手数)=-0.25,但我希望它始终是正数?
 
mikanit:
谁能告诉我如何使结果总是积极的?(买入手数-卖出手数)=-0.25,但它必须始终是正数?
MathAbs()。
 

我是这样做的:如果(profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots)()

括号内是什么?

 

如果(profitbuy+profitsell > SymbProf_magBUY_magSELL* MathAbs((OrdersTotalMagicBuyLots(MagicBuy)-OrdersTotalMagicSellLots(MagicSell))/Lots) (??????)

在哪里 ???? 什么?

 
谢谢你,已经整理好了。
 

我开了一个 量=0.05的头寸。需要一个代码--当损失达到100点时,如何将仓位量减少0.01,以5位数计算?

谢谢你。

 

我写了多少个EA,它们都是在用挂单交易时检查市场条件(止损平仓、点差等)。我看了看网格员的写法,但我没有看到任何一个网格员在发送任何订单之前检查同一停止平移的价值。原因是什么呢?

 
alsu:

论坛上有很多关于测试器和为什么其结果与现实生活不同的元论。请看文章部分,这个话题已经不止一次被提及了。

谢谢你。
 

找到了一个替代品。

alsu:

这意味着在DLL中,字符串是作为char*传递的,而不是作为MqlStr.但并不 意味着在ex4程序中,字符串不是作为MqlString存储 的。一般来说,从ex4到dll的参数转移(据开发者说)是一个相当复杂的过程,伴随着各种检查和参数的转换。

竺可桢

你读过MQL4参考资料吗?MQL4-string与带有空终端的c-string相同。

该结构只为安排字符串阵列而设计。纯粹是Metaquotes的一项发明,以方便创建字符串数组。

来自shlwapi.dll库的StrStrA。测试。

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);//это для перевода десятичного формата в шестнадцатеричный, используем в print.
#import "StrAddress.dll"
int GetStrAddress(string szStr);//из самописной dll.
#import "shlwapi.dll"
int StrStrA(string pszFirst, string pszSrch);//из WinAPI.
#import

int addr1;//будет выходной переменной для функции из самописной dll.
int addr2;//то же самое для функции из WinAPI.

int init()
  {//тестовый прогон; в init(), это чтобы не повторялось
   string s; strAddress (s);
   s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   int    counted_bars=IndicatorCounted();//оставляем блок пустым
   
   return(0);
  }

void strAddress (string myStr)//тестовая функция
  {
   addr1=GetStrAddress(myStr);//эта из dll
   addr2=StrStrA(myStr,myStr);//эта из WinAPI
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), " указатель 1: ", IntegerToHexString(addr1), ", указатель 2: ", IntegerToHexString(addr2));//в лог
  }

日志。

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 043 BE440, указатель 2: 00000000
строка "something" указатель 1: 043 C8970 указатель 2: 043 C8970
строка "MyStr" указатель 1: 043 BE450, указатель 2: 043 BE450
строка "mystr" указатель 1: 043 BE458, указатель 2: 043 BE458

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 01 C980E0, указатель 2: 00000000
строка "something" указатель 1: 01 CDD050, указатель 2: 01 CDD050
строка "MyStr" указатель 1: 01 C980F0, указатель 2: 01 C980F0
строка "mystr" указатель 1: 01 C980F8, указатель 2: 01 C980F8

строка "" указатель 1: 00000000, указатель 2: 00000000
строка "" указатель 1: 01 CAFF20, указатель 2: 00000000
строка "something" указатель 1: 01 CA7100, указатель 2: 01 CA7100
строка "MyStr" указатель 1: 01 CAFF30, указатель 2: 01 CAFF30
строка "mystr" указатель 1: 01 CAFF38, указатель 2: 01 CAFF38

其机制如下。Shlwapi.dll在/system32。StrStrA是StringSubstr 的一个WinAPI类似物。MQL4是一种无类型语言,所以如果我们在输出端设置一个int,而不是一个字符串,我们得到的是一个指针,而不是一个字符串。StrStrA搜索字符串中第一个出现的子串(区分大小写,但由于我们的字符串是相同的,所以我们并不关心),由于我们的字符串是相同的,所以它返回一个指向字符串第一个字符的指针,即字符串本身。

让我为那些将使用这个代码的人解释一下。WinAPI中没有字符串格式。相反,只有lpsz格式(一个指向以0x00结尾的字符数组的第一个元素的指针,又称/0)。它是一个指向内存地址的指针。由于我们的内存单元是32位的(即4个字节),int也是4个字节的大小,所有东西都能整齐地放在那里。

结论:你可以很容易地将字符串打包成int数组,从而模拟结构(而MQL4中没有结构和类),以便在需要结构或类时,进一步将它们传递给dll。用于数据类型转换的自写dll(即像 "int(const char*)"(C型转换)或C++中的类似结构)现在不能使用。