[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 390

 

下午好。关于标准 SendMail 函数的问题 ......为了了解该函数的工作原理,我写了这个脚本

//+------------------------------------------------------------------+
//|                                             функция_SendMail.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//+------------------------------------------------------------------+

SendMail("Скрипт Функция_SendMail","Webmoney - идите в жопу!!!!");
Alert(GetLastError());
   
//+------------------------------------------------------------------+   
   return(0);
  }
//+------------------------------------------------------------------+

当在客户终端窗口运行时,日志中出现一个错误

在设置中(客户终端菜单工具->设置->邮件 标签),设置了以下参数。

SMTP 登录和来自谁的 字段中没有三个点,而是有一个我想发送邮件的邮箱名称,而在To 字段中是我想发送邮件的邮箱名称。

同时,SMTP 服务器 字段中指定的端口号确实为25

注意:该截图是在邮件 的帮助部分进行的。

问题:这个错误是什么,如何摆脱它?编译器不显示错误, GetLastError()函数 返回0

P.S.为了不给论坛添乱,提前感谢您的回复

 
7777877:

下午好。关于标准 SendMail 函数的问题 ......为了了解该函数的工作原理,我写了这个脚本

当在客户终端窗口运行时,日志中出现一个错误

在设置中(客户终端菜单工具->设置->邮件 标签),设置了以下参数。

SMTP 登录和来自谁的 字段中没有三个点,而是有一个我想发送邮件的邮箱名称,而在To 字段中,是我想发送邮件的邮箱名称。

同时,SMTP 服务器 字段中指定的端口号确实为25

注意:该截图是在邮件 的帮助部分进行的。

问题:这个错误是什么,如何摆脱它?编译器不显示错误, GetLastError()函数 返回0

P.S.为了不给论坛添乱,提前感谢您的回复

看一下端口和加密。也许你应该把它设置为2525。
 

请帮助。

以下是代码


//-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
        if(BuyLots  > SellLots)money = BuyLots * 10;
        if(BuyLots  < SellLots)money = SellLots * 10;
  if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0;
           

我没有办法使一个循环打开,当一个交易以负数关闭时,如果下一个订单关闭时高于零,即正数余额,但小于负数,我们将正数加到负数,得到一个新的负数值,这个值已经比较少了。

if(OrderProfit() >= 0 && Sum_Loss < 0.0)
                  double lastLoss_two = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss_two;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
               }

如果它是更多的负数,根据信号,我们关闭订单并从头开始循环。


情况是,当这段代码在损失中关闭交易时,它会记住减去的余额,而当它在加号中关闭交易时,如果加号小于余额,那么它就会重置Sum_Loss,我需要它不被清零,并被砍掉。

所以这就是现在的工作方式。

它检查一个已关闭的订单,如果已关闭的订单的利润小于零,那么这个利润将被添加到Sum_Loss中,以此类推,直到开放交易的利润超过(将超过)Sum_Loss,当达到时,交易被关闭,Sum_Loss被清零,循环重新开始。

我需要。

订单以负数成交,其负数利润被加到Sum_Loss中,然后如果下一笔交易以正数利润成交,Sum_Loss就会减少从利润中获得的金额,这意味着下一笔开仓的订单Sum_Loss将获得更小的金额,以此类推,直到订单的利润大于Sum_Loss,然后Sum_Loss被清零,一个新的循环开始。

Sum_Loss = 0。

第一笔平仓单:利润(-50)< 0

Sum_Loss + profit (Sum_Loss + (-50))

Sum_Loss = -50。

第二笔平仓单:利润(+40)>0且Sum_Loss<0

Sum_Loss + profit (Sum_Loss + 40)

Sum_Loss = -10
 
7777877:

下午好。关于标准 SendMail 函数的问题 ......为了了解该函数的工作原理,我写了这个脚本

当在客户终端窗口运行时,日志中出现一个错误

在设置中(客户终端菜单工具->设置->邮件 标签),设置了以下参数。

SMTP 登录和来自谁的 字段中没有三个点,而是有一个我想发送邮件的邮箱名称,而在To 字段中是我想发送邮件的邮箱名称。

同时,SMTP 服务器 字段中指定的端口号确实为25

注意:该截图是在邮件 的帮助部分进行的。

问题:这个错误是什么,如何摆脱它?编译器不显示错误, GetLastError()函数 返回0

P.S.为了避免在论坛上乱丢垃圾,提前感谢您的答复

帮助

服务器smtp.mail.ru:25真的可以工作。

 
YOUNGA:

帮助

smtp.mail.ru:25服务器真的可以使用。

我的测试登录,从谁,到谁,都是匹配的。

也许是防火墙妨碍了他们?

哦,伙计,那是一百万个提示--重置终端!


 

帮助别人

我在价格x处下了一个挂单。我能否在某处找到挂单的价格(在日志中......或者),或者我将不得不自己写一个数组。

 

晚上好!

请告诉我错误的可能来源。我只是在学习这门语言,所以我有点束手无策。

专家顾问代码中的任务是从.scv文件中读取数据(一行两个值,400行)并将其写入一个数组中。

double signals_array[400][2];

int init()
  {

   int Handle;
      Handle=FileOpen("Signals.csv",FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
      {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла");//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла");//..такое сообщ
         PlaySound("Bzrrr.wav");          // Звуковое сопровождение
         return;                          // Выход из start()      
      }

   for (int i = 0; i < 400; i++)
      {
      for (int j = 0; j < 2; j++)
         signals_array[i][j] = StrToDouble(FileReadString(Handle));
      }

Alert (signals_array[120][0],"; ",signals_array[0][1]," OK!");
//----
   return(0);
  }

问题是这样的:如果我在图表上抛出EA,它就会从数组中打印出正确的警报,但如果我试图测试EA,它就会在日志中打印出警报 "没有文件"。也就是说,它似乎无法访问该文件(尽管它是不可思议的),并向数组中写入数值(这被另一个警报所证实),但根据日志,它在寻找该文件时被卡住。困惑。下面是一个屏幕截图。

 

alexeymosc:

问题如下:如果我把专家顾问扔到图表上,它就会从数组中输出正确的值,但如果我试图测试专家顾问,它就会在日志中输出 "没有文件 "的警告。也就是说,它似乎不能访问文件(尽管它是不可思议的),并将值写入一个数组(这被另一个警报所证实),但在日志中找到一个文件时却冻结了。困惑。


在测试器和图表中,文件在不同的目录中被写入和读取。

  1. MetaTrader 4\tester\experts\files
  2. MetaTrader 4/experts/files
 
alexeymosc:

晚上好!

请告诉我错误的可能来源。我只是在学习这门语言,所以我有点束手无策。

专家顾问代码中的任务是从.scv文件中读取数据(一行两个值,400行)并将其写入一个数组中。

问题是这样的:如果我在图表上抛出EA,它就会从数组中打印出正确的警报,但如果我试图测试EA,它就会在日志中打印出警报 "没有文件"。也就是说,它似乎无法访问该文件(尽管它是不可思议的),并向数组中写入数值(这被另一个警报所证实),但根据日志,它在寻找该文件时被卡住。困惑。下面是一个屏幕截图。

如果一个文件是开放的,它应该被关闭,即使在处理它的过程中收到错误。到目前为止,我没有看到任何更多的错误。

它可以这样读。

signals_array[i][j] = FileReadDouble(Handle);
 
Reshetov:

在测试器和图表中,文件在不同的目录中被写入和读取。

  1. MetaTrader 4\tester\experts\files
  2. MetaTrader 4/experts/files

尤里,尊重!我现在已经理解了它,并把它修好了。

Zhunko,谢谢你。我试过那样做,但我得到一个错误,比如不能从字符串文件中读取二进制数据或类似的东西。总之,我的建设工作。