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

 
sting-igor:
DoC对交易的数量有限制吗?

有些人不仅对交易数量 有限制,甚至对请求的数量也有限制。

他们是这样的发明家!:-))

 
下午好!
上次我问了一个关于开启订单的问题,现在我有一个关于关闭订单的问题)。
下面是一段代码,其中有打开订单和关闭订单的功能。
当我的专家顾问工作时,我得到了这样的 "奇特现象":例如,10个不同的订单被打开,其中2个在过程中被关闭。

其余的订单保持开放,直到测试结束,尽管当一个订单被打开时,应该有条件地关闭另一个订单。

........................
magick=MathRand(); 
     
     if(NewBar())
 {     

  //---- Условие SELL
if(MAarrUP1[j]>0.35 && MAarrUP2[j]>1.8)
     {
 closeDnOrd();OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue);
     } 
  
  //---- Условие BUY
    if(MAarrDN1[j]<-0.35 && MAarrDN2[j]<-1.8)
    {
closeUpOrd();OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red);
     }
}
............
//--------------------------------------------------------- Функции

//----- Функция закрытия селл

void closeUpOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

  if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
      } 
    }

//---- Функция закрытия бая

void closeDnOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

 if(OrderType()==OP_BUY)
{
 OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
      } 
  }

另一个关于使用OrderClose()时的错误4051和134的问题,它们是什么意思?我从日志中复制了信息。

02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: invalid ticket for OrderModify function
02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderModify error 4051


02:54:37 2010.10.17 23:22  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderSend error 134

 
Vinin:

最后一个选项似乎或多或少地起了作用。尽管有可能简化计算方法
告诉我为什么你把iMAOnArray函数放在一个单独的循环中?
 

请指教!我如何关闭两个具有相同魔力,但手数不同的挂单


int start() { double MyLastBullOpenPrice=0; for(int Cnt=0;Cnt<OrdersTotal(); Cnt++){ OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES); if(OrderMagicNumber()==12345 && OrderType()==OP_BUY){ MyLastBullOpenPrice=OrderOpenPrice(); double Cena=OrderOpenPrice()+5*Point; double Totalcena= Bid。










如果(Totalcena>Cena)
{
if (OrdersTotal()>0)
{ for (int i=OrdersTotal()-1; i>=0; i-)
{ 如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)。
{ 如果(OrderMagicNumber()==12345)

{ 如果(OrderDelete(OrderTicket())==true)
{
Print("Error = ",GetLastError()); return(0);
}
} }
}
}

return(MyLastBullOpenPrice);
}

 
Fox_RM:
下午好!
上次我问了一个关于开启订单的问题,现在我有一个关于关闭订单的问题)。
下面是一段代码,其中有打开订单和关闭订单的功能。
当我的专家顾问工作时,我得到了这样的 "奇特现象":例如,10个不同的订单被打开,其中2个在过程中被关闭。

其余的订单保持开放,直到测试结束,尽管当一个订单被打开时,应该有条件地关闭另一个订单。

另一个关于使用OrderClose()时的错误4051和134的问题,它们是什么意思?我从日志中复制了信息。

134 - 没有钱,4051 - 传给函数的参数不好。

至于重点--检查变量magick是否只被分配一次,最好是在函数init()中,否则,每个订单都会有自己的magick,结果会像你描述的那样。

 

请帮助我在字符串中通过数组添加(或编写)一个字符替换功能。

有两个字符数组。

stringsymbols1[] = {"a", "b", "c", "d"};
string symbols2[] = {"1", "2", "3", "4" };


试图写一个函数,根据数组将文本badc替换成2143,结果是这样的。

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

我知道这是错的,我根本无法将数组组装成一个字符串。请帮助。

 
Zhunko:

有些人不仅对交易数量有限制,甚至对请求的数量也有限制。

他们是这样的发明家!:-))

是否有任何阻止他们插手你的事务的措施?
 
Lians:

请帮助我在字符串中通过数组添加(或编写)一个字符替换功能。

有两个字符数组。

string symbols1[] = {"a", "b", "c", "d"};
string symbols2[] = {"1", "2", "3", "4" }


试图写一个函数,根据数组将文本badc替换成2143,结果是这样的。

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

我知道这是错的,我根本无法将数组组装成一个字符串。请帮助。

你应该已经在替换数组中找到了该字符的索引,为什么还要再创建一个数组?

试着在第一个循环中把它添加到一个纯文本变量中。

字符串 ReplaceSymbolsInStr(string text)

{


string symbols1[] = {"a", "b", "c", "d" };

string symbols2[] = {"1", "2", "3", "4" };

string textNew=""。

int textLen = StringLen(text)。

for (int i1=0; i1<textLen; i1++)
{
string OneSymbol =StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==OneSymbol) {textNew = textNew + symbols2[ i2 ]; i2=ArraySize(symbols1); }

}

}

返回(textNew);

}

 


或者像这样更简单。

字符串 ReplaceSymbolsInStr(string text)

{


string symbols1[4] = {"a", "b", "c", "d"}; //数组大小 由其中的符号数量决定。

string textNew=""。

for (int i1=0; i1< StringLen(text) ; i1++)

{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==OneSymbol )

{

textNew = textNew + (i2+1); // 符号本身的数字被添加到返回的文本 中。

i2=ArraySize(symbols1); // 完成搜索循环。

}

}

}

返回(textNew);

}

 

日安!

能否请您告知(或给出一个例子链接),如何将csv格式的数据自动发送至电子邮件?

谢谢你。