Как кодировать? - страница 79

 

Спасибо, ребята, оба предложения, вероятно, лучше, чем то, над чем я работал.

 

Кто-нибудь, пожалуйста, помогите мне....

Привет...

Я надеюсь, что кто-нибудь здесь может помочь мне, как закодировать это.Это советник martiangle и что я хочу сделать это:

1 . Когда открывается пост 2-го слоя, я хочу, чтобы целевая точка 1-го слоя переместилась в целевую точку 2-го слоя.Таким образом, когда целевая точка попадает во 2-й слой, эти 2 поста могут закрыться одновременно.Если 3-й слой открыт, целевая точка 1-го и 2-го слоя может переместиться в цену 3-й целевой точки.Таким образом, мы можем закрыться одновременно.То же самое происходит, если 4-й слой, 5-й слой и другие слои открыты.Просто нужно переместить все целевые точки в целевую точку текущего слоя или пост.

2.Нужна блокировка пунктов.Когда открывается 1-й слой, и получена прибыль, например, 15 пунктов (TP 32), ea делает блокировку по цене sl (например, 5 пунктов), поэтому, когда цена развернется на 10 пунктов, пост может автоматически закрыться с прибылью 5 пунктов.Только для поста 1-го слоя.2-й слой не нужно активировать, потому что это мартиангл советник.

Я очень извиняюсь за мой плохой английский. Надеюсь, кто-нибудь сможет помочь мне с кодом для этого советника. Спасибо

martiangle_rsi_.mq4

С уважением,

Очень нужна помощь

Файлы:
 

Помогите с комментарием пожалуйста

Я пытаюсь установить комментарий для отображения на экране, но не очень удачно.

Мне удалось получить количество пунктов для одной пары, но я не могу показать общее количество пунктов для нескольких пар.

Любая помощь была бы очень кстати

вот пример этого кода

//========== ФУНКЦИЯ getPipValue

double getPipValue(double ord,int dir)

{

double val;

RefreshRates();

if(dir == 1) val=(NormalizeDouble(ord,Digits) -

NormalizeDouble(Ask,Digits));

else val=(NormalizeDouble(Bid,Digits) - NormalizeDouble(ord,Digits));

val = val/Point*co;

return(val);

}

//== конец функции

int getSpread()

{

int spread=MarketInfo(Symbol(),MODE_SPREAD);

return(spread);

}

//========== ФУНКЦИЯ getOpenOrders

void getOpenOrders()

{

int nsl, nsd;

string mngMagic, trailon;

int totalorders = OrdersTotal();

for(int j=0; j<totalorders;j++)

{

OrderSelect(j, SELECT_BY_POS, MODE_TRADES);

if((OrderType() == OP_BUY || OrderType() == OP_SELL) &&

OrderSymbol() == Symbol()&&(MagicNumber==0 || MagicNumber ==

OrderMagicNumber()))

{

double val=getPipValue(OrderOpenPrice(),OrderType());

//int val = OrderProfit()/(OrderLots()*10);

}

if(MagicNumber == 0)

mngMagic = "Все "+Symbol()+" сделки.";

else

mngMagic = "Сделки с магическим числом = "+MagicNumber";

//RefreshRates();

Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(), "Ордер открыт: ",OrderOpenPrice(),

"\nPip Count: ", val,

"\nMy Account Cutoff Limit: ",Open_Loss_To_CloseTrades,

"\nУправление: ", mngMagic);

Спасибо

 

Значение пункта текущего ордера можно получить следующим образом:

( OrderClosePrice() - OrderOpenPrice() ) / MarketInfo( OrderSymbol(), MODE_POINT )

Если вы хотите использовать "bid" и "ask", вам также необходимо использовать те, которые относятся к символу ордера, т.е. MarketInfo( OrderSymbol(), MODE_BID ) и MarketInfo( OrderSymbol(), MODE_ASK ).

 

ralph.ronnquist

Добрый день

Спасибо за код, я использовал его, но он считает только для одной пары, а не для всех пар.

Я экспериментировал с различными сценариями, но все еще не работает.

У меня есть ea, которая открывает 3 позиции, которые я запускаю на 5 парах. Я могу видеть количество пунктов для каждой пары, но не для всех.

 
Beno:
ralph.ronnquist

Добрый день

Спасибо за код, я использовал его, но он считает только для одной пары, а не для всех пар.

Я экспериментировал с различными сценариями, но все еще не работает.

У меня есть ea, которая открывает 3 позиции, которые я запускаю на 5 парах. Я могу видеть количество пунктов для каждой пары, но не для всех.

Ну, если вы знакомы с глобальными переменными, вы можете использовать их для хранения информации о пипсах по каждой паре, на которую ссылается каждый символ. Создайте другую глобальную переменную, которая ссылается на общее значение пипсов и вызовите эту конкретную глобальную переменную, получите ее обновление по мере увеличения пипсов, сохраните ее. Глобальные переменные могут быть доступны каждой ea, так как они хранятся в памяти MT4.

Если хотите, я могу помочь вам написать код.

 

Гиддай Шах-Джаб

Я видел глобальные переменные в коде раньше, но у меня не было опыта работы с ними, так что да, я хотел бы принять вашу помощь, чтобы закодировать это, так как это сводит меня с ума.

 
Beno:
Gidday ShahJB Я видел глобальные переменные в коде раньше, но у меня был нулевой опыт работы с ними, так что да, я хотел бы принять вашу помощь, чтобы закодировать это, так как это сводит меня с ума.

Я только что быстро закодировал следующее. Почему бы вам не добавить этот код первым. Попробуйте и напишите мне, если не получится. Мне нужно немного поспать.

string val_old_string = "val_old" + Symbol();

int val_old = GlobalVariableGet(val_old_string);

if(val != val_old)

{

int pips_increment_decrement;

int current_total_pips;

string counter = "Счетчик пипсов";

double pips_counter = GlobalVariableGet(counter);

if (val>val_old)

{

pips_increment_decrement = val - val_old;

current_total_pips = pips_increment_decrement + pips_counter;

GlobalVariableSet(counter, current_total_pips);

GlobalVariableSet(val_old_string, val);

}

else

{

pips_increment_decrement = val_old - val;

current_total_pips = pips_counter - pips_increment_decrement;

GlobalVariableSet(counter, current_total_pips);

GlobalVariableSet(val_old_string, val);

}

}

 

Почему это не работает???

Здравствуйте,

Я полный новичок в программировании. Благодаря сообщениям и обучающим ресурсам на этом сайте я набрался смелости и попытался создать несколько советников, один из которых будет использовать Lguerre как один из триггеров (я использовал этот сайт, чтобы помочь мне в этом; Expert Advisor Builder for MetaTrader 4 ). Проблема моего советника в том, что он не открывает ордера на покупку при срабатывании триггеров. Я создал пару советников, используя вышеупомянутый сайт, и они прекрасно исполняют ордера для длинных и коротких позиций (советники использовали RSI). Пожалуйста, посмотрите на прилагаемый советник, 3-28, и дайте мне знать, что я делаю неправильно.... я использую неправильный формат для уровней, которые должны быть достигнуты перед исполнением сделки? Нужны ли дополнительные параметры для Laguerre?

Я потратил на это постыдное количество времени, и я на грани того, чтобы сдаться.... Любая помощь будет очень признательна!!!!!.

Кажется, я нашел ответ... зачем мне нужно умножать Laguerre в моем советнике, хотя?????

Файлы:
3-31.mq4  10 kb
 

Я столкнулся с проблемой закрытия позиций. Помогите, пожалуйста

Я столкнулся с проблемой, которую не знаю как решить. Моя программа имеет несколько открытых ордеров и закрывает их все вместе, но иногда я думаю, что некоторые ордера не заполнены, поэтому она продолжает ждать, пока они не будут заполнены, и это блокирует мою программу. Что вы, ребята, нашли лучший способ закрыть все открытые ордера? Спасибо за помощь.

Вот код:

int OrdersTotalLong()

{

int order_total = 0;

for (int i = 0; i < OrdersTotal(); i++)

{

OrderSelect(i,SELECT_BY_POS, MODE_TRADES);

if (OrderType() == OP_BUY)

order_total++;

}

return(order_total);

}

int MaxLongOrder()

{

int order = 0;

double lotbuyed = 0;

for (int i = 0; i < OrdersTotal(); i++)

{

OrderSelect(i,SELECT_BY_POS, MODE_TRADES);

if ((OrderType() == OP_BUY) && (OrderLots() > lotsbuyed))

{

lotsbuyed = OrderLots();

order = i;

}

}

return(order);

}

int CloseLong()

{

while (OrdersTotalLong() > 0) //пока не останется ни одного открытого ордера (закрываем все)

{

if (OrderSelect(MaxLongOrder(), SELECT_BY_POS, MODE_TRADES) == false) continue;

OrderClose(OrderTicket(),OrderLots(), Bid, 3, Green);

}

}

return(0);

}

Причина обращения: