//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
ResetLastError(); // установим значение предопределенной переменной _LastError в нольif(!PositionSelect(_Symbol))
PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = %lu", _Symbol, GetLastError());
int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позицийif(pos_total > 0) // если есть открытые позиции
{
for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
{
if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
{
ulong pos_id = PositionGetInteger(POSITION_IDENTIFIER);
double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
double pos_tp = PositionGetDouble(POSITION_TP);
double pos_sl = PositionGetDouble(POSITION_SL);
PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
}
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Open_Add_Pos_Buyl()
{
for(int i=pos_total-1; i<pos_total; i++) // ищем последнюю по списку открытую позицию
{
PositionGetTicket(i); // получим тикет позиции по индексу в списке открытых позиций
if(PositionGetString(POSITION_SYMBOL) == _Symbol && // если совпадает символ открытой позиции
PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && // если совпадает тип открытой позиции
PositionGetInteger(POSITION_MAGIC) == Magic_Number) // и если совпадет мэджик
{
double pos_price_open=PositionGetDouble(POSITION_PRICE_OPEN); // объявим и инициализируем переменную для цены открытой позиции
if(// тут задано условие для открытия позиции)
{
double new_price_pos=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
trade.Sell(0.01,_Symbol,new_price_pos,0,0);
}
}
}
}
现在有了。谢谢原来,如果至少有一个打开的位置,错误代码 4753 就不会出现。
敬礼,弗拉基米尔
如果您写下以下内容,错误代码就会出现
如果您这样写,它就会出现
你好,阿列克谢,有一点需要澄清。是否有必要使用PositionSelect() 而不是循环,还是我又误解了什么?
敬上,弗拉基米尔
你好,阿列克谢,我想问一下。是否有必要使用PositionSelect() 而不是循环,还是我又误解了什么?
敬上,弗拉基米尔
你想怎么写都行,最重要的是写入一个不存在的字符,否则就会出错...
您可以随意编写,主要是编写一个不存在的字符,以获得错误信息....。
但不要向我扔拖鞋!!!我无法获取错误代码!我得不到错误代码。((((
弗拉基米尔
错误 = "
那里应该有一个指定器
谢谢你,Artem,成功了!..!非常感谢大家!
弗拉基米尔
总之,用不同的方式解决了这里 描述的问题:
弗拉基米尔
大家晚上好!
我正在尝试创建一个函数,用于在现有未结 头寸的基础上打开一个额外的头寸(不带止损和止盈)。我已经编写了代码:
但由于某种原因,它看不到未结头寸。我试图用调试器找出问题所在,但在启动循环后,调试器会立即退出函数,而看不到里面写了什么。我在PositionGetTicket(i)处设置了断点,能否请您再告诉我,我的代码哪里出了问题?
敬上,弗拉基米尔。
但由于某种原因,它看不到未结头寸。我试图用调试器找出问题所在,但在启动循环后,它立即退出函数,而看不到里面写的内容。我在 PositionGetTicket(i) 上设置了断点,能否请您告诉我,我的代码哪里又出错了?
敬上,弗拉基米尔。
什么是 pos_total?
pos_total 等于多少?
你好,变量 pos_total=PositionsTotal() 是在全局级别设置的。现在我把它移到了函数内部,结果发现问题就出在这里。一切正常。问题出在哪里?我完全不明白其中的诀窍!!!
现在,为了做实验,我又把 pos_total 移到了全局层,结果它又不工作了,但当我把它放到函数内部时,它又正常工作了!这就是奇迹,至少对我来说是这样!!!!)))
原来全局变量不能被函数初始化?是这样吗?
敬上,弗拉基米尔