[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 82

 
nemo811:
谢谢你的帮助。我理解设置标志的逻辑和返回订单数量的功能。但我也对订单关闭的时刻感兴趣。看起来标志条件试图再次下单,但返回订单号的函数说它已经减少了1,并且还初始化了一个仓位。如果我错过了什么,请纠正我。


在你提供的代码中,条件在一个地方(BUY=true),在标志改变之前,重新开仓不会发生......因为开仓的函数调用来自于这个条件块......而这个代码中的标志只有在EA重新启动后才能改变,此时值为true的变量被初始化

或者,也许我不明白这个问题 :)

 
NameLess:


这段代码中的标志只有在重新启动专家顾问后才能改变,这时数值为true的变量被初始化。

或者我不明白这个问题:)


谢谢你,你说对了。我现在要实施它。
 
NameLess:


这就是原来工作的版本。非常感谢你和IgorM

extern bool BUY = true;
extern int Magic = 0;
extern double Lot = 0.1;
extern int takeprofit = 0;
extern int stoploss = 0;
extern int slippage = 3; 
double SL,TP;
int init(){
return(0);
}
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
OPENORDER ("Buy");

BUY=false;
}

return(0);
}
void OPENORDER(string ord)
{
int ticket = -1;
while (ticket<0)
{
if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
Sleep(500);
}
return;
}
 

string Val="";
Val = iBands(NULL,0,50,2,0,PRICE_CLOSE,MODE_LOWER,0);
string substr=StringSubstr(Val,0,1);
point_low=StrToDouble(substr);
substr=StringSubstr(Val,2,1);
point_low+=StrToDouble(substr)/10;
substr=StringSubstr(Val,3,1);
point_low+=StrToDouble(substr)/100;
substr=StringSubstr(Val,4,1);
point_low+=StrToDouble(substr)/1000;
substr=StringSubstr(Val,5,1);
point_low+=StrToDouble(substr)/10000;
substr=StringSubstr(Val,6,1);
point_low+=StrToDouble(substr)/100000;

substr=StringSubstr(Val,7,1);
point_low+=StrToDouble(substr)/1000000; //тут плюсуем 6-ю цифру после запятой.

人们,没有什么可以帮助的!我无法得到一个小数点后5位的数值。我已经尝试了所有我能想到的选项,我已经将一个字符串 转化为一个数字,我已经将一个子串转化为一个数字,我已经取出了一些数字(上面的例子),我愚蠢地将它们一个一个地加上去,超过4位小数,它就是不加,开始向4位小数进发。

会不会是Alert不显示超过第4个符号的双变量? 我不知道该怎么想......某种神秘的东西(

 

我写了两个链接在一起的EA(它们不交易,只是创建gobals),我想我可以用它们来做一个类似于mt4中常规价格图表的等量图表 指标。或者如果有人已经使用了类似的东西,请分享代码:)

附加的文件:
eqvol.rar  3 kb
 
NameLess:

会不会是Alert不显示超过第四位的双变量? 我不知道该怎么想......某种神秘的东西(

是的,如果只输出一个数字,它(像Print)会显示标准的4位数字。

使用DoubleToStr可以更准确。

 

Rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr. 对,Alert 中的终端不显示超过4个字符。我把双子换回线,拿出来看屏幕--一切正常。

为这篇废话杀了半天的人。 tinny,最初一切都在工作(

 
NameLess:

人们,没有什么可以帮助的!我无法得到一个小数点后5位的数值。我已经尝试了所有我能想到的选项,我已经将一个字符串转化为一个数字,我已经将一个子串转化为一个数字,我已经取出了一些数字(上面的例子),我愚蠢地将它们一个一个地加上去,超过4位小数,它就是不加,开始向4位小数进发。

会不会是Alert不显示超过4位数的可变双数? 字符串显示全部)我不知道该怎么想。

好吧,像往常一样,一切都在实验中。我们写剧本。

#property copyright ""
#property link      ""
#include <Basic_dll.mqh>

//+------------------------------------------------------------------+
//|                 Старт работы скрипта                             |
//+------------------------------------------------------------------+
int start(){
  string Stroka,Podstroka,SMB;
        int DGS,BezDrobi;
        double Rezult;
        SMB=Symbol();
        //DGS=MarketInfo(SMB,MODE_DIGITS);
        DGS=5;// дигитс задаём принудительно, чтоб можно было проверить на любой валюте
        // передаём левое значение в переменную
        Rezult=1.252546987;
        // возводим число в степень
        for(int i=1;i<=DGS;i++){
                Rezult=Rezult*10;
        }
        // В степень возвели. Теперь отбрасываем дробную часть.
        BezDrobi=OtbrosDrobnChasti(Rezult);// функция отбрасывает дробную часть числа
        Alert("BezDrobi = ",BezDrobi);
        // теперь ставим на место запятую
        Rezult=BezDrobi*1.0;
        for(i=1;i<=DGS;i++){
                Rezult=Rezult/10;
                Alert("Rezult = ",Rezult);
        }
        Alert("----------- ",SMB," -----------");
        return(0);
}

我们可以看到,有一个dll-card连接到脚本。它只有一个剥除数字的小数部分的功能。该dll文件附在本帖之后。现在我们应该依次将该脚本应用于2个货币对。我把它放在英镑和欧元-日本上。在英镑中,我有4个小数位。关于欧元-日本货币对-两个。下面是脚本操作的结果。

在英镑中,你可以看到逗号是如何持续移动的。你还可以看到,最后一次除法在小数部分留下了4位数字。我们可以做一个假设,既然我的数字=4,那么小数点后的第五位就被切断了。所以欧日的结果也应该是小数点后只有2位,因为上面的数字=2。然而,实验表明,它的结果也是小数点后有4位。所以我们的假设并不正确,可能发生了四舍五入的情况。让我们试着把最后的4名替换成7名。其结果是。

我们看到了什么?所得的5现在变成了6。因此,发生了自动四舍五入的情况。

我不知道脚本在五位数字符上的表现如何,但我对四位数和两位数字符的工作并不满意--终端在没有被要求的情况下进行了干扰和舍弃。所以我必须向开发商提出问题。或者--选项2--获取指标读数,将其放入一个字符串,将字符串发送到一个dll中,按照我们的需要处理那里的数据,并从dll中返回交易订单

附加的文件:
experts.rar  42 kb
 

来自帮助的信息(根据警报)。

Данные типа double выводятся с 4 десятичными цифрами после точки. Для вывода чисел с большей точностью используйте функцию DoubleToStr().

去弄清楚开发商为什么要这样做......

 
drknn:


谢谢,研究了代码,非常有趣。一切,正如我上面所描述的,结果是更简单的:终端只是不显示超过窗口中的第4位数字。而所有的想法都是有效的,只是以不同的方式解决了转换问题 :)

zy。我再次确信,所有的问题都能在逻辑上得到解决,而这里的情况原本是不符合逻辑的,所以我们在错误的地方寻找了一个搭子:)