Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 234

 
Integer:


Ну вот, как всегда и сразу... Модераторы, лучше бы за порядком следили, там, где за ним нужно следить. На форуме какой-то дурдом твориться, а где модераторы? Встрять, сломать, отправить куда подальше, тут сразу модераторы есть. Может пора завязывать междусобойчики?

Больно наблюдать, как ссорятся из-за пустяков, гиганты форума. Это форум программистов мощнейшего ресурса. Будьте вежливее. Предлагаю:

1. При попытке перехода на личностей, даже в скрытной форме - бан на сутки;

2. Оскорбление личности - бан на неделю;

3. Неоднократное оскорбление с матом- бан на месяц;

4.Игнорирование всех предыдущих предупреждений и повторения нарушений в жесткой форме - вечный бан.

 
yosuf:

Больно наблюдать, как ссорятся из-за пустяков, гиганты форума. Это форум программистов мощнейшего ресурса. Будьте вежливее. Предлагаю:

1. При попытке перехода на личностей, даже в скрытной форме - бан на сутки;

2. Оскорбление личности - бан на неделю;

3. Неоднократное оскорбление с матом- бан на месяц;

4.Игнорирование всех предыдущих предупреждений и повторения нарушений в жесткой форме - вечный бан.



Абсолютно согласен, вот только, к сожалению, модераторы здесь не достаточно компетенты, что бы выявить то "нечто в скрытой форме". Тут же палец в рот не клади, все утонченно изощренные дипломаты.
 

Извините за оффтоп, но может кто-то подскажет чего оно так:

Из справочника:

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

Массивы также можно передавать по ссылке, все изменения отразятся в исходном массиве. В отличие от простых параметров массивы можно передавать по ссылке и в библиотечные функции."

Чтобы передать значение по ссылке из библиотечной функции мне приходится использовать промежное звено в виде массива единичной размерности,

иные обходных пути есть?

И чего оно все так сделано?

 
ALXIMIKS:

Извините за оффтоп, но может кто-то подскажет чего оно так:

Из справочника:

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

Массивы также можно передавать по ссылке, все изменения отразятся в исходном массиве. В отличие от простых параметров массивы можно передавать по ссылке и в библиотечные функции."

1. Чтобы передать значение по ссылке из библиотечной функции мне приходится использовать промежное звено в виде массива единичной размерности,

иные обходных пути есть?

2. И чего оно все так сделано?

1. Правильно. По-другому не получится в MQL4.

2. Что именно? Если про передачу по ссылке, то это для передачи больших объёмов данных (больше длины базового типа). Чтобы стек не загружать ими. Обычно структуры, классы, массивы передаются по указателю или ссылке. Хотя, класс и структуру можно вернуть из функции через return. Также, можно вернуть ссылку или указатель на класс, структуру или массив.

 

Имеется такая проблем ка:

Когда меняю стоплос, время от времени не выставляет стопы на последний открытый ордер. Бывает довольно редко но простреливает время от времени.

Ошибок с ценами нет. Просто падлец иногда не выставляет ордер на последнюю позицию, после которой идет пересчет ордеров.

Не подскажите где я ему не так объяснил?

//+-------------------------------------------------------------------------------------+
//|                        Управление StopLoss, TakeProfit                              |
//+-------------------------------------------------------------------------------------+
bool ProfitManagement()
{
double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
double StopLossSell = SellAP-Profit*Point;
double TakeProfitSell = SellAP - Profit*Point;
RefreshRates();
for(int good = 0; good < OrdersTotal(); good ++)     // Выбираем со всего массива ордеров
 {
 if(OrderSelect (good, SELECT_BY_POS, MODE_TRADES))             
 if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
 if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  //Выбираем ордера эксперта
   { 
//-------------------------Order Buy-----------------------------------------------------  
if (BuyCount >1)                                           //Если открыты длинные позиции
 {
 if (BuyAP < Bid)                                                //Если  мы идем по рынку  
 if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)           // Профит не равен нужному
 if (Bid - StopLossBuy > DedZone)                    // Уровень достаточно удален от цены
 if (WaitForTradeContext())                                // Свободен ли торговый поток?
 if (OrderType() == OP_BUY)                                        // Выбираем ордера Buy
 if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime))    // Изменяем StopLoss
  {
 Alert (Symbol()," Хрень со стопами! ",   GetLastError());
 return(false);
  }

// ну и далее по логике
 
yosuf:

Больно наблюдать, как ссорятся из-за пустяков, гиганты форума. Это форум программистов мощнейшего ресурса. Будьте вежливее. Предлагаю:

1. При попытке перехода на личностей, даже в скрытной форме - бан на сутки;

2. Оскорбление личности - бан на неделю;

3. Неоднократное оскорбление с матом- бан на месяц;

4.Игнорирование всех предыдущих предупреждений и повторения нарушений в жесткой форме - вечный бан.


А расстрел когда? Не будет?
 
Limita:

Имеется такая проблем ка:

Когда меняю стоплос, время от времени не выставляет стопы на последний открытый ордер. Бывает довольно редко но простреливает время от времени.

Ошибок с ценами нет. Просто падлец иногда не выставляет ордер на последнюю позицию, после которой идет пересчет ордеров.

Не подскажите где я ему не так объяснил?

Объясните словами эту последовательность:

   //-------------------------Order Buy-----------------------------------------------------  
         if (BuyCount >1) {
            if (BuyAP < Bid)                                      //Если  мы идем по рынку, то выполнится следующая  
            if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)   // Профит не равен нужному
            if (Bid - StopLossBuy > DedZone)                      // Уровень достаточно удален от цены
            if (WaitForTradeContext())                            // Свободен ли торговый поток?
            if (OrderType() == OP_BUY)                            // Выбираем ордера Buy
            if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
               Alert (Symbol()," Хрень со стопами! ",   GetLastError());
               return(false);
            }

Простыми словами, как бы вы приятелю рассказали, далёкому от программирования.

 

Мы хотим зарабатывать с каждой позиции например 50 пунктов. StopLoss равен наша средняя цена + 50 пунктов.

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

Мы открываем еще одну позицию в направлении Бай. Средняя цена поменялась мы меняем StopLoss.

Ну и конечно мы выставляя стопы, следуем правилам брокера (торговый поток, стоп левел.) иначе брокер нас не поймет :))

Надеюсь смог объяснить :))

 
Limita:

Мы хотим зарабатывать с каждой позиции например 50 пунктов. StopLoss равен наша средняя цена + 50 пунктов.

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

Мы открываем еще одну позицию в направлении Бай. Средняя цена поменялась мы меняем StopLoss.

Ну и конечно мы выставляя стопы, следуем правилам брокера (торговый поток, стоп левел.) иначе брокер нас не поймет :))

Надеюсь смог объяснить :))

М-дя-с ... Я имел ввиду - логику тех строчек...

Там у вас неоднозначная логика, т.к. нет фигурных скобок. А значит - не каждая строка будет выполняться при выполнении пред-предыдущего условия

 
Limita:

Имеется такая проблем ка:

Когда меняю стоплос, время от времени не выставляет стопы на последний открытый ордер. Бывает довольно редко но простреливает время от времени.

Ошибок с ценами нет. Просто падлец иногда не выставляет ордер на последнюю позицию, после которой идет пересчет ордеров.

Не подскажите где я ему не так объяснил?


for (int good = 0; good < OrdersTotal(); good ++){                                // Выбираем со всего массива ордеров
    }    

перебор лучше делать так (кто-то писал что у него были проблемы при вашем варианте перебора при модификации или удалении ордеров) :

for (int good = OrdersTotal()-1; good >= 0; good --){     // Выбираем со всего массива ордеров
    }  

И зачем масло-масленное ??? (оставьте что-то одно)

 if (OrderSymbol() != Symbol() || OrderMagicNumber() !=  MagicNumber) continue;
 if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber) {          //Выбираем ордера эксперта
    }
Причина обращения: