[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 933

 
Dimka-novitsek:

Вот он


Советник работает. Сделки открывает
 
gheka:

все равно туплю и не доходит до меня, не пойму откуда берется уникальный порядковый номер, везде на примерах все по разному,

если я не ошибаюсь не я его создаю, например

Раз уж вы удалили из лички вопрос, не дождавшись ответа - кину сюда:

Давай так разберём:

index -

Позиция ордера или номер ордера в зависимости от второго параметра.
(позиция или номер ордера откуда берётся???)

"в зависимости от второго параметра" -это значит зависит от "select" ??

Позиция ордера - это его расположение в массиве ордеров в твоём терминале. Именно эту позицию мы и перебираем в цикле:

Поиск ордера:

for (int index=0; index<OrdersTotal(); index++) // Цикл по терминалу. В кач-ве переменной цикла будет index для наглядности
    {
       if (OrderSelect(index, SELECT_BY_POS) && OrderMagicNumber()==Magic) // Если выбран ордер и магик равен магику советника
           {
                if (OrderTipe()==OP_BUY)                                   // Если нам нужен ордер Бай
                   {
                       //............... Тут код обработки выбранного орд
                   }
           }
    }

Если ищем по SELECT_BY_POS, то следующий параметр по-умолчанию MODE_TRADES и его можно опустить, не писать. Советник будет искать позиции, которые ещё не закрыты, т.е. в рынке.

Если нам нужно поискать ордера в уже закрытых, то после параметра SELECT_BY_POS обязательно нужно указать и следующий: MODE_HISTORY. Тогда советник будет искать только из списка закрытых позиций и удалённых или сработавших ордеров.

(если я не ошибаюсь то это уже которые установленные ордера так? типа "0" это самый первый сверху,
"1" это второй в списке и так далее) наверно???

Именно это и есть позиция, расположение ордера в массиве ордеров терминала, так сказать - его индекс - тот самый index
... и располагаются они в массиве, начиная с нулевой ячейки массива, хотя номер ордера начинается с 1. Т.е. первый ордер расположен в нулевой ячейке массива, второй - в первой, третий - во второй и т.д. ...

Теперь по тикетам. Тикет, уникальный номер ордера, присваивается твоим ДЦ. По этому номеру можно однозначно идентифицировать именно этот ордер или позицию. Есть при этом некоторые НО ... Тикет должен быть предварительно запомнен где-нибудь в советнике (переменная, массив), чтобы ты точно мог знать, что это нужный тебе ордер с этим тикетом. Я для этой цели использую собственную функцию учёта ордеров в советнике, в которой храню не только те данные по ордерам, которые можно получить стандартными ф-циями, но также и запоминаю в ней например данные по фибо-уровням, которые рассчитываю сразу после открытия позиции и заношу их в свой учёт ордеров. Далее легко по времени открытия и тейку выбираю позицию и двигаю стоп-уровень по фибо-уровням, которые сохранил для данной позы в своём массиве ордеров... Также от-туда я могу взять и тикет нужного мне ордера и потом его использовать со стандартными ф-циями:

   if (OrderSelect(Ticket, SELECT_BY_TICKET) && OrderCloseTime()==0) // Если выбран ордер по тикету и время его закрытия равно нулю
      {
         if (OrderTipe()==OP_BUY)                                   // Если нам нужен ордер Бай
            {
               //............... Тут код обработки выбранного ордера
            }
      }

Вот тут нужно обязательно сравнивать время закрытия ордера с нулём. Потому, что при выборе по тикету MODE_TRADES и MODE_HISTORY игнорируются и не используются и нам для определения того, что ордер не закрыт и выбран из списка НЕзакрытых позиций, нужно посмотреть время его закрытия. Если он ещё в рынке, то и время его закрытия будет равно нулю.
Если же тебе нужно посмотреть данные по закрытому ордеру и выбирать его тебе нужно по тикету, то сравнивать время закрытия нужно на больше ноля и, если оно так и есть - значит ордер уже закрыт.

pool -

Источник данных для выбора. Используется, когда параметр select равен SELECT_BY_POS. Mожет быть одной из следующих величин:
MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров,
это текущие ордера


MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров.

а это из списка завершенных ордеров,типа из списка журнала так ведь?

Всё верно.

double OrderProfit( )
он возвращает чистую прибыль, а какую? последнего ордера или всех ордеров?

Он возвращает текущую прибыль для незакрытого выбранного ОДНОГО ордера...

Если ордер уже закрыт - возвращает принесённую прибыль или убыток этого ордера. Одного, выбранного.

Без учёта свопов, комиссий и пр... Для их учёта - нужно свою ф-цию делать.

=============================================================================

Надеюсь разберёшься ... :)
 

Советник работает. Сделки открывает

Спасибо!!!Знать платформа торговая болеет,видимо. 

 
Renown:
Есть потребность в советнике сгладить волатильность (вот такую величину: High[iHighest(NULL, 0, MODE_HIGH, 30, 1)] - Low[iLowest(NULL, 0, MODE_LOW, 30, 1)] ) экспоненциальной скользящей средней. Насколько я понимаю, стандартной iMA этого не сделать и для этого нужно писать функцию? Кто-нибудь может помочь кодом?


iMAOnArray

 

доброго времени суток всем....возникла проблема...может хто может помочь???

торгую советником основаным на принципе мартингейла...решил так же включить в нём стоп лосс...для расчёта лося используеться такая формула...

Stopper = AveragePrice - Stoploss * Point;
это мне не подходет так как стоп в таком случае изменяеться при последующих коленах...а мне хотелось бы что б он был фиксированым для всех колен 
например 100 пп....тоесть после открытия ордера стоп выставляеться на 100 пп...допустим второе колено открываеться через 30 пп. значит для него стоп
должен быть уже 70 пп что б попасть туда же куда и первый...
кароче нужен фиксированый не изменяемый стоп лосс для всей серии...
если не сложно обьясните))) или киньте функцию)))) буду благодарен

 

Возник вопрос по определению нажатия какой-нибудь клавиши. Необходимо отследить сам факт нажатия и, если нажата, например, K, то выполняем некоторые действия. Здесь ( _http://msdn.microsoft.com/en-us/library/ms646293%28v=VS.85%29.aspx ) нашел функцию int GetAsyncKeyState(int vKey), в принципе то, что нужно... но есть загвоздка: нужно чтобы факт нажатия определялся только если окно MetaTrader-а активное. Использую следующий простой код в советнике для проверки:

#define VK_K                            0x4B    // K key 
#import         "user32.dll"
   int GetAsyncKeyState(int vKey);

//-----------------------------------------------------------------------------------------------//
int init()  {

 return(0);
}
//-----------------------------------------------------------------------------------------------//
int deinit()   {

 return(0);
}
int start() {
   if(GetAsyncKeyState(VK_K)==0) Print("K не нажата...");
   else {Alert("НАЖАТА K");}
 return(0);
}
пока писал пост слушал алерты :). Помогите плиз победить =)
 

Ужас!!! Друзья, я заблудился... :)

Есть два вложенных цикла. При выходе из внутреннего по break куда я вываливаюсь - в начало или в конец внешнего цикла?

На закрывающую скобку внешнего или на открывающую?

 
artmedia70:

Ужас!!! Друзья, я заблудился... :)

Есть два вложенных цикла. При выходе из внутреннего по break куда я вываливаюсь - в начало или в конец внешнего цикла?

На закрывающую скобку внешнего или на открывающую?

код в студию.

а вообще сразу за закрывающую скобку внутреннего цикла

 
Necron:

код в студию.

а вообще сразу за закрывающую скобку внутреннего цикла

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

ну неужели никто не знает как сделать фиксированный стоп для серии((((

тут же много профи, задание то наверняка не из сложных

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