任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 537

 
VoDyaMon:

如果你写一个简单的脚本,创建一个类型为OBJ_ARROW_RIGHT_PRICE的对象,然后将其删除,该对象并没有被删除。此外,ObjectType命令突然发现,创建的对象不是OBJ_ARROW_RIGHT_PRICE类型(==36),而是==22,即一个简单的 "向上的箭头"!!!。我是唯一一个有这种情况的人,还是所有人都有这种情况?

在这个问题上已经有了 "专家 "的意见:如阅读帮助,或没有足够的内存:)。

记忆是足够的。

看起来ObjectCreate 命令绘制了一个OBJ_ARROW_RIGHT_PRICE类型的对象 ,它不能被ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE)命令删除,但可以被ObjectsDeleteAll(0,22)命令删除,就好像我们没有正确的价格标签,而是一个 "向上箭头"。 这是谁的错?

.........

要删除一个OBJ_ARROW_RIGHT_PRICE类型的对象,请使用ObjectsDeleteAll(0,OBJ_ARROW)命令,并强制指明子窗口。

p.s. OBJ_ARROW类型的对象是任何 "箭头",而不仅仅是 "向上箭头"。 ObjectCreate(...OBJ_ARROW...)立即创建一个 "向上箭头"。为什么它不在帮助中呢?

写在这个 主题里。至少开发商在那里。
 

有一个脚本。

#property show_confirm;
int slip=5;

void start()
{
  for(int i=OrdersTotal()-1;i<=0;i--)
  {
   int p=0; double price=0;
      if(OrderSelect(i,SELECT_BY_POS))
     {
       switch(OrderType())
        {
         case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
         case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
         default: break;
        }
         while(p<5)                              
           {                                    
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==true) 
               break;                   
            else                              
              {
               p++;                              
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(1000);                       
              }
           }
     }
 }
}

这甚至没有试图关闭目前开放的单一市场订单。为什么?

它没有在日志中写任何错误。

2014.03.10 04:39:11.093 脚本 closeallmarket AUDUSD,M30: 删除<br / translate="no"> 2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: uninit reason 0
2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30: 已初始化
2014.03.10 04:39:10.109 Script closeallmarket AUDUSD,M30: loaded successfully
 

替换

 for(int i=OrdersTotal()-1;i<=0;i--)

 for(int i=OrdersTotal()-1;i>=0;i--)
 

专业人士先生,您好!不要拒绝一个编程的新人,看看代码,看看它写得是否正确。谁不是懒得去处理。我无法在策略测试器中进行测试,因为它是多货币。带有代码和指标的文件附在档案中。



附加的文件:
 

下午。

我不能从php到mql4做一个代码模拟。

$massiv = array(
            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877            
            );
                        
            asort($massiv);
            $i=0;
            foreach ($massiv as $key => $val){$i++;$massiv[$key]=$i;}
            
            $a="";
            ksort($massiv);
            foreach ($massiv as $key => $val){$a=$a.$val.".";}  

就是说,从一个数组中。

            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877 

需要得到一个数组

            "1" => 1,
            "2" => 3,
            "3" => 2,
            "4" => 4,
            "5" => 7,
            "6" => 5,
            "7" => 6,
            "8" => 8 

需要帮助。

 
Roger:

替换


哦......。伙计,那是另一个时间,谢谢))))
 

我想写一个简单的EA,当我的账户达到指定的存款货币的盈利或亏损值时关闭所有的头寸(我是按几个符号开的),但它一出现就关闭了头寸((())。

我不明白什么是错的。

input double tp_c = 80.0;
input double sl_c = 120.0;

input int slip=5;

 double profit_c = 0.0;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }
 
denis77515:

专业人士先生,您好!不要拒绝一个编程的新人,看看代码,看看它写得是否正确。谁不是懒得去处理。我无法在策略测试器中进行测试,因为它是多货币。我在档案中附上了一个带有代码和指标 的文件。



我非常感兴趣的是,一个初学者是如何下定决心用这样的专家顾问进行交易,并编写一个交易系统,这是很值得的。我不为存款感到遗憾?


代码显示了很多错误,却没有进入交易算法,没有试图优化它。

请找出你的函数CountBuy_JPY()CountSell_JPY()CountBuy_GBP()之间的区别,在任何一个函数的输出中,你都会得到相同的结果,在买入中是所有未结的买入头寸,在其他中是所有的Sal头寸。试着把所有这些函数写在一起,得到两个带有符号和订单数量 的链接数组。

你与测试者的距离就像月亮一样遥远。你应该为每个函数写脚本,看看你得到什么,然后运行调试器,看看所有的变量。这是你逐渐向前迈进的唯一途径

 
evillive:

我想写一个简单的EA,当我的账户达到指定的存款货币的盈利或亏损值时关闭所有的头寸(我是按几个符号开的),但它一出现就关闭了头寸((())。

我不明白什么是错的。


分析条件......。而且建议是一样的,使用打印出来的脚本,暂时把交易操作 注释掉,调试
if(profit_c > tp_c || profit_c < sl_c) closeall();   profit_c > 80 ИЛИ  profit_c < 120   
 
evillive:

我想写一个简单的EA,当我的账户达到指定的存款货币的盈利或亏损值时关闭所有的头寸(我是按几个符号开的),但它一出现就关闭了头寸((())。

我不明白什么是错的。



input double tp_c = 80.0;
input double sl_c = - 120.0; //// minus 120

input int slip=5;

 double profit_c ;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   profit_c = 0.0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }