Парный трейдинг - Грааль есть

drDim

Активный участник
использует индикатор(ы) из стандартной поставки для определения направления вероятного движения валютной пары с простым алгоритмом установки лотов при том или ином исходе :)....

при том или ином исходе - то есть пошла или нет цена в сторону которую мы определили как наиболее вероятная?
 

tommy27

Гуру форума
Вешать его можно на любую пару нужно только высчитать на сколько пунктов пара выше или ниже задаваемой. (желательно в точке ноль). Здесь и ответ на вопрос куда делись 2000 с х.. пунктов. Подними или опусти график на N пунктов. А реверс надо бы. [/ATTACH]

В данный момент наблюдается так сказать 0 точка между этой веткой и веткой Неколлы на альпари - там щас тож подобный индюк ( ЧартБилдер) обсуждают :), посмотрим куда дальше двинуться ветки от этой нулевой точки и когда опять сойдуться:)
 

kestkest2

Новичок форума
Подскажите пожалуйсто это обе пары покупать или продовать?? EURUSD / USDCHF *EUR -USD-CHF* 1 вверх / 1 вниз
И как узнать когда покупать а когда продовать???
 

Heroix

Активный участник
дээмаш - гмм... глянул я на четверг... часовки, ну нету там раздвижек...
с какого бодуна вы вошли в рынок?
раздвижка была 13го числа... которая и закрылась в конце того дня....

Эммм... ничего не путаешь? Вот раздвижка за 13-е.. ну и где она сошлась в конце дня?
12121.gif
 

xxxXAOCxxx

Новичок форума
Вот эксперт для окрытия сразу нескольких ордеров- немного допишите и будет вам счастье
extern double lot = 0.1; // открываемый лот
extern int workLimit = 10; // уровень отклонения
extern int openSet = 1; // открываемая серия
extern int slippage = 2; // проскальзывание

// массив валютных пар, по которым откроются ордера
string pairs[28] = {"AUDUSD", "NZDJPY", "GBPCHF"};-----дописать пары

int pairsOpen[28], // кол-во открытых ордеров по каждой валютной паре
totalPairs; // кол-во валютных пар в массиве

// цена открытия текущего бара для всех валютных пар
double openPrice[28];

int number, // множитель для 5 или 4 знаков после запятой
magic, // магическое число
lastError, // код последней ошибки
count, // кол-во открытых ордеров
orderType; // тип ордера (Buy или Sell)

bool work; // флаг работы

void init()
{
// чтобы не путаться с пунктами
if (Digits == 3 || Digits == 5)
{
number = 10;
}
else
{
number = 1;
}
totalPairs = 0;
int i,
size = ArraySize(pairs); // ранг массива
for (i = 0; i < size; i++)
{
if (StringLen(pairs) > 0) // если элемент не пустой
{
totalPairs++; // увеличиваем кол-во пар
}
else
{
break; // иначе выходим из цикла
}
}
orderType = 0; // тип ордера Buy (рыночный)-если 1 то Sell
magic = 100101; // магическое число советника
lastError = 0; // код последней ошибки
work = true; // флаг, разрешающий работу
count = 0; // кол-во открытых ордеров
setOpenPrices();
loadOrders();
return;
}

void start()
{
loadOrders(); // обновляем список ордеров
criteria(); // проверяем условия
return;
}

void criteria()
{
if (checkOpenPrices() && work) // если новый бар и работа разрешена
{
openOrders(); // открываем ордера
}
else if (count < totalPairs // если кол-во ордеров меньше пар
&& work == false) // и работа запрещена
{
openOrders(); // также открываем ордера
}
}

void openOrders()
{
int i, total;
for (i = 0; i < totalPairs; i++) // проход по всем вал. парам
{
if (pairsOpen < openSet) // если номер сета не задан
{
if (openOrder(orderType, i)) // открываем ордер
{
pairsOpen = openSet; // записываем номер сета
total++; // увеличиваем счетчик
}
}
}
Alert("Buy X: всего открыто - " + total); // выводим сообщение
work = false; // запрещаем работу
setOpenPrices(); // обновляем цены открытия
}

bool openOrder(int type, int pairNumber)
{
int ticket = -1; // номер тикета
double bid, // цена Bid
price, // цена, по к-й будет открытие ордера
open, // цена открытия бара
pt, // размер пункта
SL = 0; // стоп-лосс
string symb = pairs[pairNumber]; // финансовый инструмент

open = iOpen(symb, 0, 0); // узнаем цену открытия
pt = MarketInfo(symb, MODE_POINT); // узнаем размер пункта, примеру (0.0001)
while (ticket < 0) // пока открытие ордера не будет успешным
{
switch(type) // тип ордера Buy или Sell
{
// Buy
case 0:
price = MarketInfo(symb, MODE_ASK); // цена Ask
bid = MarketInfo(symb, MODE_BID); // цена Bid
if ((bid - open) / pt > workLimit * number) // если цена ушла от
{ // цены открытия бара
return (false); // на расстояние
} // больше заданного в
// workLimit, выходим
break;
// Sell
case 1:
price = MarketInfo(symb, MODE_BID); // цена Bid
if ((open - price) / pt > workLimit * number)
{
return (false);
}
break;
}
// отправляем запрос
ticket = OrderSend(symb, type, lot, price, slippage * number, SL, 0,
DoubleToStr(openSet, 0), magic);
if (ticket < 0) // если ордер не открыт, ищем ошибку
{
lastError = GetLastError(); // получаем код последней ошибки
if (checkError() == false) // если ошибка критичная, выходим
{
return (false);
}
}
else // ордер успешно открыт
{
// успешно открыли позицию
return (true);
}
}
}

bool checkError()
{
if (lastError == 0)
{
return(false);
}
switch (lastError)
{
// Преодолимые ошибки
case 128: // Истек срок ожидания совершения сделки
case 129: // Неправильная цена
case 135: // Цена изменилась
case 138: // Новые цены
RefreshRates();
return(true);
case 136: // Нет цен
while (RefreshRates() == false)
{
Sleep(1);
}
return(true);
case 4: // Торговый сервер занят
case 6: // Нет связи с торговым сервером
case 137: // Брокер занят
case 146: // Подсистема торговли занята
Sleep(500);
RefreshRates();
return(true);
// Критические ошибки
case 2: // Общая ошибка
case 5: // Старая версия торгового терминала
case 64: // Счет заблокирован
case 133: // Торговля запрещена
default:
return(false);
}
}

void loadOrders()
{
ArrayInitialize(pairsOpen, 0); // обнуляем массив
count = 0;

int i,
totalOrders = OrdersTotal(), // всего ордеров
pairNumber; // номер вал. пары
for (i = 0; i < totalOrders; i++)
{
if (OrderSelect(i, SELECT_BY_POS) == true && // есть следующий ордер
OrderType() == orderType && // ордер нашего типа
OrderMagicNumber() == magic && // наше маг. число
StrToDouble(OrderComment()) == openSet) // наш сет
{
count++;
pairNumber = getPairNumber(OrderSymbol()); // получаем номер вал. пары
pairsOpen[pairNumber] = openSet; // обновляем кол-во отк. ордеров
}
}
if (count > 0) // если есть ордера на Buy
{
work = false; // запрещаем работу
}
}

void setOpenPrices()
{
int i;
for (i = 0; i < totalPairs; i++)
{
openPrice = iOpen(pairs, 0, 0);
}
}

bool checkOpenPrices()
{
int i;
for (i = 0; i < totalPairs; i++)
{
if (iOpen(pairs, 0, 0) != openPrice) // равна ли цена открытия
{ // в массиве openPrice[]
return (true); // текущей цене открытия
}
}
return (false);
}

int getPairNumber(string pair)
{
int i;
for (i = 0; i < totalPairs; i++)
{
if (pairs == pair) // если наша пара
{
return (i); // выходим из цикла
} // и функции
}
}

void deinit()
{
return;
}
 
Последнее редактирование модератором:

NeColla

Элитный участник
Эммм... ничего не путаешь? Вот раздвижка за 13-е.. ну и где она сошлась в конце дня?
Посмотреть вложение 70048

гмм... включи Внимательность... Период H1, а не 15ти минутки.....

типа так...



ЗЫ... а с другой стороны... дмшу надо бы обратиться в общество телепатов... это они горазды Угадывать какими инструментами и мотивами пользовал автор при выставлении сделки....
 
Последнее редактирование:

Мерлин

Активный участник
товарищи, а как ЧартБилдер нормально запустить? а то показывает 2 горизонтальные линии ((
 

Мерлин

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

Heroix

Активный участник
гмм... включи Внимательность... Период H1, а не 15ти минутки.....

типа так...



ЗЫ... а с другой стороны... дмшу надо бы обратиться в общество телепатов... это они горазды Угадывать какими инструментами и мотивами пользовал автор при выставлении сделки....

Как раз-таки я вимателен. Ты писал, что "раздвижка была 13го числа... которая и закрылась в конце того дня.... ". Еще раз: раздвижка была 13го числа.
А сейчас пишешь, что 13 уже было схлопывание (мля, не нравится этот термин). В этом случае, раздвижка была 12 числа. Как ты и показал на скрине. И то, если покрутить индикатор "под свой взгляд".
Четче, товарищи.. четче выражайтесь.
 

DmH

Активный участник
дээмаш - гмм... глянул я на четверг... часовки, ну нету там раздвижек...
с какого бодуна вы вошли в рынок?
раздвижка была 13го числа... которая и закрылась в конце того дня....

Определение раздвижек зависит от выбора нулевой точки, которая не является эталонной величиной и у каждого может быть своя, как впрочем и индикаторы и настройки. Если ваш индюк не среагировал, и ничего вам не показал, значит он у вас работает с менее длинной историей и усредняет чаще. Сегодня я закрыл все позы в плюс. А вам бы не помешало не много учтивости при разговорах с малознакомыми людьми - это так совет для жизни.
 
Верх