в блоке 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("трал сдвинут");
}
}
}
//+------------------------------------------------------------------+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);
}
//+------------------------------------------------------------------+
你逐行阅读文件,每次都给你的变量赋值。当文件结束时,这些变量将拥有最后的数值。
如何实现这一点?
我不知道该用什么方法
如何实现这一点?
搞不清楚该用什么
关于这个问题,已经有很多人写过和重写过,请尝试https://www.mql5.com/ru/forum/118349
晚安,又见面了我最近开始编写一个多货币EA,在一个货币对上开出订单,在另一个货币上开出订单。
我把最近的追踪止损从EA中扯出来,开始玩弄它,但它并没有发挥作用。以下是代码。
这是我不能理解的地方。由于专家顾问是一个多货币专家顾问,它以不可预测的方式打开货币订单,有时在同一时刻为几种货币打开订单。
在后面的代码中,我计算了未平仓的订单for(int i=0; i<OrdersTotal(); i++) 并进一步进行订单选择 OrderSelect 等。我明白,某个货币对的每个未平仓订单需要数据bid, ask等。我心中只有一个变量,最糟糕的是为每一种货币写一个追踪止损)请告知可以怎么做。
又是晚安!我最近开始编写一个多货币EA,在一个货币对上开出订单,在另一个货币上开出订单。
我把最近的追踪止损从EA中扯出来,开始玩弄它,但它并没有发挥作用。以下是代码。
这是我不能理解的地方。由于该EA是一个多货币专家顾问,它以不可预测的方式打开货币订单,有时在同一时刻打开几种货币的订单。
在后面的代码中,我计算了未平仓的订单for(int i=0; i<OrdersTotal(); i++) 并进一步进行订单选择OrderSelect 等。我明白,某个货币对的每个未平仓订单需要数据bid, ask等。我心中只有一个变量,最糟糕的是为每种货币写一个追踪止损)请告知可以怎么做。
Infinity:
我不太了解这项技术,它将如何运作
关于这一点,已经有很多人写过和重写过--试试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)。
非常必要
但在声明时给它分配了一个值。
int ask = MarketInfo(sy, MODE_ASK), bid=MarketInfo(sy, MODE_BID), open, stop, level;
相应地
应该已经写好了,否则,比如说。
或者创建另一个变量,例如PriceBid,然后写上
然后在代码中使用PriceBid而不是Bid...
仔细查看你的所有代码,必要时使用特定符号的变量。
而这个符号你将在调用trawl函数时传递给它。
或
是不是更清楚了?
根据传递给函数的一对数据,给拖网代码中的变量赋值。你需要最终确定拖网代码...例如,Bid变量不应该只是被声明。
但在声明时给它分配了一个值。
相应地
应该已经写好了,否则,比如说。
或者创建另一个变量,例如PriceBid,然后写上
然后在代码中使用PriceBid而不是Bid...
仔细查看你的所有代码,必要时使用获取特定符号的变量值。
而这个符号你将在调用trawl函数时传递给它。
或
是不是更清楚了?
我唯一不明白的是,哪个货币对应该在哪个时刻发送给我。 我不知道从哪里获得信息,例如,4个订单在这些货币对上打开,这些货币对应该被发送给我。
我不知道我做得对不对......反正....。
但由于某些原因,我得到了一个错误EURUSD:零除法--这个错误可能意味着在变量0的某个地方,可能是在分割型操作中。我的实施方法到底是否正确?
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个变量。
最主要的是要记住变量的书写顺序,因为这也是我们要读取它们的顺序。
让我们开始从文件中读取数据到变量。
使用FileReadNumber() 函数,我们按照数字的写入顺序,在数字后面读取数字。
这就是它的全部内容,并不复杂 :)
我唯一不明白的是,哪个货币对应该在哪个时刻发送给我。 我从哪里得到信息,例如,有4个订单在这些货币对上打开,这些货币对应该被发送给我?
我不知道我做得对不对......反正....。
但我得到了EURUSD:零除法的错误。 显然,这个错误说我在某个变量里有0,可能是一个除法操作。我甚至试图正确地实施它吗?