1. Вы пишите для МТ-4 или МТ-5?
2. Чтобы вставить в пост код, небходимо нажать "SRC" и туда помещать код.
3. Перед тем как писать советника, нужно ознакомится с документацией и примерами
на этойм сайте(их огромное кол-во).
Удачи!
нужно в начале кода делать проверку на наличие ордеров и позиций и если они > 0 return;
надо понимать что код читается сверху вниз и слево на право. как только код прочитан, при следующем тике он будет снова читать сверху вниз и дойдет до этого:
if ((MSC>=SSC) && (MSC>=HighZone) && (CountSell() < 1))
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, 0, Magic, 0, Red);
в итоге снова выставится ордер, а уж потом прочитается дополнительное условие которое будет уже бесполезно..
1. Вы пишите для МТ-4 или МТ-5?
2. Чтобы вставить в пост код, небходимо нажать "SRC" и туда помещать код.
3. Перед тем как писать советника, нужно ознакомится с документацией и примерами
на этойм сайте(их огромное кол-во).
Удачи!
для МТ4... "OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, 0, Magic, 0, Red);" использование этой функции об этом говорит. в МТ5 нужна структура
нужно в начале кода делать проверку на наличие ордеров и позиций и если они > 0 return;
надо понимать что код читается сверху вниз и слево на право. как только код прочитан, при следующем тике он будет снова читать сверху вниз и дойдет до этого:
if ((MSC>=SSC) && (MSC>=HighZone) && (CountSell() < 1))
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, 0, Magic, 0, Red);
в итоге снова выставится ордер, а уж потом прочитается дополнительное условие которое будет уже бесполезно..
MT4.
Как может выставиться второй ордер если в в условии КоличествоПродаж < 1. Оно не проходное для второго ордера, но с этим я уже разобрался. Неправильно были прописаны последующие условия.
Они выполнялись оба за один тик из-за того что CountSell становился >0.
Возможно я объяснил тоже самое, но спасибо за помощь. :)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я новичок в программировании.
Пишу эксперта по стохастике. Необходимо что бы советник (например) продавал каждый раз как только главная линия находилась выше зоны перекупленности и мне нужно необходимо отделить часть условия продажи первого ордера от второго и т.д. что бы расчитать лот по некоторой схеме.
Советник продавал какждый бар пока цена находилась выше зоны, я поставил ограничение на кол-во ордеров и добавил условие ниже. На условие открытия второго ордера советник не реагирует.
В чем причина? подскажите как упростить код до бесконечного (грубо говоря) мартингейла начиная со второго ордера.
if (Time[0]<=PrevTime) return(0);
PrevTime=Time[0];
{
//total=OrdersTotal();
// if (total<1)
{
if ((MSC>=SSC) && (MSC>=HighZone) && (CountSell() < 1))
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, 0, Magic, 0, Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
{
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0, Red);
int j=0;
}
}
}
if ((MSC<=HighZone) && (CountSell() > 0))
{
j=1;
}
if ((MSC>=SSC) && (MSC>=HighZone) && (j==1))
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
ticket = OrderSend(Symbol(), OP_SELL, Lots(другой, расчитываемый после проверки данного условия), Bid, Slippage, 0, 0, 0, Magic, 0, Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
{
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0, Red);
j=0;
}
}
}