[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 718

 
Roger:
你逐行阅读文件,每次都给你的变量赋值。当文件结束时,这些变量将拥有最后的数值。

如何实现这一点?

我不知道该用什么方法

 
zheleznii:

如何实现这一点?

搞不清楚该用什么


关于这个问题,已经有很多人写过和重写过,请尝试https://www.mql5.com/ru/forum/118349
 

晚安,又见面了我最近开始编写一个多货币EA,在一个货币对上开出订单,在另一个货币上开出订单。

我把最近的追踪止损从EA中扯出来,开始玩弄它,但它并没有发挥作用。以下是代码。

// ну так сообственно вызываю функцию - TrailingStop();
//вот что в функции
 void TrailingStop()
{ 
   if (TrailingStop<MinStop) return; 
   int ask, bid, open, stop, level; 
   for (int i=0; i<OrdersTotal(); i++) 
      { 
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 
      if (OrderSymbol()!=Symbol()) continue; 
      if (OrderType()==OP_BUY) 
         { 
         bid=MathRound(Bid/Point); 
         open=MathRound(OrderOpenPrice()/Point); 
         stop=MathRound(OrderStopLoss()/Point); 
         level=bid-TrailingStop; 
         if (level<open || level>bid-MinStop) continue; 
         if (stop>0 && stop>=level) continue; 
         OrderModify(OrderTicket(),OrderOpenPrice(),level*Point,OrderTakeProfit(),0,White); 
         Print("трал сдвинут");
         //ShowError(); 
         } 
      if (OrderType()==OP_SELL) 
         { 
         ask=MathRound(Ask/Point); 
         open=MathRound(OrderOpenPrice()/Point); 
         stop=MathRound(OrderStopLoss()/Point); 
         level=ask+TrailingStop; 
         if (level>open || level<ask+MinStop) continue; 
         if (stop>0 && stop<=level) continue; 
         OrderModify(OrderTicket(),OrderOpenPrice(),level*Point,OrderTakeProfit(),0,White); 
         //ShowError(); 
         Print("трал сдвинут");
         } 
      } 
}

这是我不能理解的地方。由于专家顾问是一个多货币专家顾问,它以不可预测的方式打开货币订单,有时在同一时刻为几种货币打开订单。

在后面的代码中,我计算了未平仓的订单for(int i=0; i<OrdersTotal(); i++) 并进一步进行订单选择 OrderSelect 等。我明白,某个货币对的每个未平仓订单需要数据bid, ask等我心中只有一个变量,最糟糕的是为每一种货币写一个追踪止损)请告知可以怎么做。

 
Infinity:

又是晚安!我最近开始编写一个多货币EA,在一个货币对上开出订单,在另一个货币上开出订单。

我把最近的追踪止损从EA中扯出来,开始玩弄它,但它并没有发挥作用。以下是代码。

这是我不能理解的地方。由于该EA是一个多货币专家顾问,它以不可预测的方式打开货币订单,有时在同一时刻打开几种货币的订单。

在后面的代码中,我计算了未平仓的订单for(int i=0; i<OrdersTotal(); i++) 并进一步进行订单选择OrderSelect 等。我明白,某个货币对的每个未平仓订单需要数据bid, ask等我心中只有一个变量,最糟糕的是为每种货币写一个追踪止损)请告知可以怎么做。

尝试在拖网代码中传递一个工具符号。然后,对于每一对,你将调用拖网。
void TrailingStop(string sy)

if (sy == "" || sy == "0") sy = Symbol();
那么,基于sy值为特定的符号数据分配其他值...同样的问法,比如说,与Bid...
 

Infinity:

我不太了解这项技术,它将如何运作


 
Roger:

关于这一点,已经有很多人写过和重写过--试试https://www.mql5.com/ru/forum/118349。

int a1;

int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';')。
文件写入(handle,a1)。

FileClose(handle)。

在文件a1=5中。

我不明白这些基本知识。

int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';')。
这里我们给a1赋值5

FileClose(handle)。

非常必要

 
Infinity:
根据传递给函数的一对数据,给拖网代码中的变量赋值。你需要最终确定拖网代码...例如,Bid变量不应该只是被声明。

但在声明时给它分配了一个值。

int ask = MarketInfo(sy, MODE_ASK), bid=MarketInfo(sy, MODE_BID), open, stop, level;

相应地

bid=MathRound(Bid/Point);

应该已经写好了,否则,比如说。

bid=MathRound(MarketInfo(sy, MODE_BID)/Point);

或者创建另一个变量,例如PriceBid,然后写上

PriceBid=MathRound(Bid/Point);

然后在代码中使用PriceBid而不是Bid...

仔细查看你的所有代码,必要时使用特定符号的变量。
而这个符号你将在调用trawl函数时传递给它。

 TrailingStop( EURUSD);     // Тралим ЕвроБаксы
 TrailingStop("");         // Тралим символ графика


TrailingStop(NULL);         // Тралим символ графика

是不是更清楚了?

 
artmedia70:
根据传递给函数的一对数据,给拖网代码中的变量赋值。你需要最终确定拖网代码...例如,Bid变量不应该只是被声明。

但在声明时给它分配了一个值。

相应地

应该已经写好了,否则,比如说。

或者创建另一个变量,例如PriceBid,然后写上

然后在代码中使用PriceBid而不是Bid...

仔细查看你的所有代码,必要时使用获取特定符号的变量值。
而这个符号你将在调用trawl函数时传递给它。


是不是更清楚了?





我唯一不明白的是,哪个货币对应该在哪个时刻发送给我。 我不知道从哪里获得信息,例如,4个订单在这些货币对上打开,这些货币对应该被发送给我。

我不知道我做得对不对......反正....。

в блоке start  определяю открытые ордера и определяю по каким парам они открыты
 for (int i=0; i<OrdersTotal(); i++) 
      { 
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 
      if (OrderSymbol()=="EURUSD") {sy="EURUSD";MinStop=MarketInfo(sy,MODE_STOPLEVEL); break; }
      if (OrderSymbol()=="GBPUSD") {sy="GBPUSD";MinStop=MarketInfo(sy,MODE_STOPLEVEL); break; }
       
      } 
  TrailingStop(sy);

а в функции делаю следующее

void TrailingStop(string sy)
{ 
   if (TrailingStop<MinStop) return; 
   int ask, bid, open, stop, level,point; 
   for (int i=0; i<OrdersTotal(); i++) 
      { 
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 
      if (OrderSymbol()==sy)  
      bid=MarketInfo(sy,MODE_BID);
      ask=MarketInfo(sy,MODE_ASK);
      point=MarketInfo(sy,MODE_POINT);
      if (OrderType()==OP_BUY) 
         { 
         bid=MathRound(bid/point); 
         open=MathRound(OrderOpenPrice()/point); 
         stop=MathRound(OrderStopLoss()/point); 
         level=bid-TrailingStop; 
         if (level<open || level>bid-MinStop) continue; 
         if (stop>0 && stop>=level) continue; 
         OrderModify(OrderTicket(),OrderOpenPrice(),level*point,OrderTakeProfit(),0,White); 
         Print("трал сдвинут");
         //ShowError(); 
         } 
      if (OrderType()==OP_SELL) 
         { 
         ask=MathRound(ask/point); 
         open=MathRound(OrderOpenPrice()/point); 
         stop=MathRound(OrderStopLoss()/point); 
         level=ask+TrailingStop; 
         if (level>open || level<ask+MinStop) continue; 
         if (stop>0 && stop<=level) continue; 
         OrderModify(OrderTicket(),OrderOpenPrice(),level*point,OrderTakeProfit(),0,White); 
         //ShowError(); 
         Print("трал сдвинут");
         } 
      } 
}

但由于某些原因,我得到了一个错误EURUSD:零除法--这个错误可能意味着在变量0的某个地方,可能是在分割型操作中。我的实施方法到底是否正确?

 
zheleznii:

int a1;

int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';')。
文件写入(handle,a1)。

FileClose(handle)。
在文件a1=5中。

对基础知识的误解。 请解释--通过填写拟议的

int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';')。
这里我们给a1赋值5

FileClose(handle)。

我真的需要它。

因此,按照顺序。

如果只需要最新的数据,那么为什么要保存以前的数据?("写之前 "发生在FILE_READ|FILE_WRITE 模式的组合中)。
因此,使用 FILE_CSV|FILE_WRITE 模式更为合理,在写入新数据之前,会删除之前的记录。

让我们开始向文件中写入4个变量。

//+------------------------------------------------------------------+
int start(){
   int handle;
   int a1 = 3;
   double punkt = 0.4;
   double nn = 1128;
   double mm = 1000;

   handle=FileOpen("a1.csv",FILE_CSV|FILE_WRITE,';');
   FileWrite(handle,a1,punkt,nn,mm);
   FileClose(handle);           
}
//+------------------------------------------------------------------+

最主要的是要记住变量的书写顺序,因为这也是我们要读取它们的顺序。

让我们开始从文件中读取数据到变量。

//+------------------------------------------------------------------+
int start(){
   int handle;
   int a;
   double p;
   double n;
   double m;   
   handle=FileOpen("a1.csv",FILE_CSV|FILE_READ, ';');         
   
   a = FileReadNumber(handle);    //считываем первую цифру, соответствующую переменной a1 и далее по порядку...
   p = FileReadNumber(handle);    //punkt
   n = FileReadNumber(handle);    //nn
   m = FileReadNumber(handle);    //mm
   
   FileClose(handle);           
}
//+------------------------------------------------------------------+

使用FileReadNumber() 函数,我们按照数字的写入顺序,在数字后面读取数字。
这就是它的全部内容,并不复杂 :)

 
Infinity:


我唯一不明白的是,哪个货币对应该在哪个时刻发送给我。 我从哪里得到信息,例如,有4个订单在这些货币对上打开,这些货币对应该被发送给我?

我不知道我做得对不对......反正....。

但我得到了EURUSD:零除法的错误。 显然,这个错误说我在某个变量里有0,可能是一个除法操作。我甚至试图正确地实施它吗?

在每个变量赋值 操作之后或每个除法操作之前进行校对,看看你在哪里得到一个零,然后从那里开始。
原因: