MakarFX
Элитный участник
Одновременное открытие сделок по разным валютам и закрытие по общему профиту.Арбитраж что это такое?
Одновременное открытие сделок по разным валютам и закрытие по общему профиту.Арбитраж что это такое?
Возможность этого не исключена. Изначально это не планировалась. Действия в основном будут посходить в пределах 1 валютной пары. А запущен будет на нескольких.Одновременное открытие сделок по разным валютам и закрытие по общему профиту.
Если советники стоят на разных символах - тогда, как правило, можно ставить одинаковые меджики, т.е., в коде должна быть проверка на символ, что уже разделит проверку позиций. Соответственно, если работают два советника по одному и тому же символу - меджики ставить только разные.А если поставить в 2 окнах на разных парах по советнику,в которых уже есть встроенный тралл,то нужно ли в этих советниках писать разные магик номера,при условии что советники стоят на одном счёте?
И еще вопрос - если нужно закрыть все открытые ордера,то какой код даст быстрое по скорости закрытие,имеет ли значение как организовать цикл перебора ордеров от последнего или от первого или нет разницы,если можно приведите кусок кода?
ЗАРАНЕЕ СПАСИБО!
for(int i=OrdersTotal()-1; i>=0; i--)
Поправочка: это мультивалютник, а арбитраж подразумевает наличие "быстрого" и "медленного" брокеров: за одним наблюдаем, а по второму входим. Как правило, берем пару пипок и закрываемся, время жизни позиции до нескольких секунд.Одновременное открытие сделок по разным валютам
Вы ошибаетесь. Арбитраж - это больше торговля коррелирующими парами -https://ru.wikipedia.org/wiki/Арбитраж_(экономика)Поправочка: это мультивалютник, а арбитраж подразумевает наличие "быстрого" и "медленного" брокеров: за одним наблюдаем, а по второму входим. Как правило, берем пару пипок и закрываемся, время жизни позиции до нескольких секунд.
Тогда можно в МТ4 каждую пару отдельно протестить.Изначально это не планировалась.
- "... на практике возникает разница цен" - можно и так, согласен. Но далеко не всегда торговля по разным парам основана на корреляции между ними.Вы ошибаетесь. Арбитраж - это больше торговля коррелирующими парами
СогласенНо далеко не всегда торговля по разным парам основана на корреляции между ними.
void OnTick()
{
TORGOVLAY();
uy(MoyOrdera);
}
//############################################
void uy(int &gh2[6])
{
gh2[0]=0;
gh2[1]=0;
gh2[2]=0;
gh2[3]=0;
gh2[4]=0;
gh2[5]=0;
for(int y=0; y<=OrdersTotal()-1; y++)
{
if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
{
if(OrderType()==OP_BUY)
{
gh2[0]++;
};
if(OrderType()==OP_SELL)
{
gh2[1]++;
};
if(OrderType()==OP_BUYSTOP)
{
gh2[2]++;
};
if(OrderType()==OP_SELLSTOP)
{
gh2[3]++;
};
if(OrderType()==OP_BUYLIMIT)
{
gh2[4]++;
};
if(OrderType()==OP_SELLLIMIT)
{
gh2[5]++;
};
}
}
}
для разнообразия эти строчкиЧто скажите о такой реализации?
if(OrderType()==OP_BUY)
{
gh2[0]++;
};
if(OrderType()==OP_SELL)
{
gh2[1]++;
};
if(OrderType()==OP_BUYSTOP)
{
gh2[2]++;
};
if(OrderType()==OP_SELLSTOP)
{
gh2[3]++;
};
if(OrderType()==OP_BUYLIMIT)
{
gh2[4]++;
};
if(OrderType()==OP_SELLLIMIT)
{
gh2[5]++;
};
gh2[OrderType()]++;
Чуть сократил.Код:void OnTick() { TORGOVLAY(); uy(MoyOrdera); } //############################################ void uy(int &gh2[6]) { gh2[0]=0; gh2[1]=0; gh2[2]=0; gh2[3]=0; gh2[4]=0; gh2[5]=0; for(int y=0; y<=OrdersTotal()-1; y++) { if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol) { if(OrderType()==OP_BUY) { gh2[0]++; }; if(OrderType()==OP_SELL) { gh2[1]++; }; if(OrderType()==OP_BUYSTOP) { gh2[2]++; }; if(OrderType()==OP_SELLSTOP) { gh2[3]++; }; if(OrderType()==OP_BUYLIMIT) { gh2[4]++; }; if(OrderType()==OP_SELLLIMIT) { gh2[5]++; }; } } }
Что скажите о такой реализации?
void uy(int &gh2[6])
{
int type;
ArrayInitialize(gh2,0);
for(int y=0; y<OrdersTotal(); y++)
{
if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)
{
type=OrderType();
gh2[type]=gh2[type]+1;
}
}
}
а путаницы не будет?gh2[OrderType()]++;
Давно не пробовал, но раньше так наращивать можно было только переменные, а для массивов это не прокатывало.можно записать так
Код:gh2[OrderType()]++;
Только нужно учесть размер массива, т.к. он может быть больше 6-ти:можно записать так
КОНСТАНТА | ЗНАЧЕНИЕ | ОПИСАНИЕ |
---|---|---|
OP_BUY | 0 | Ордер на покупку |
OP_SELL | 1 | Ордер на продажу |
OP_BUYLIMIT | 2 | Отложенный ордер на покупку по достижении заданного уровня, текущая цена выше уровня |
OP_BUYSTOP | 3 | Отложенный ордер на покупку по достижении заданного уровня, текущая цена ниже уровня |
OP_SELLLIMIT | 4 | Отложенный ордер на продажу по достижении заданного уровня, текущая цена ниже уровня |
OP_SELLSTOP | 5 | Отложенный ордер на продажу по достижении заданного уровня, текущая цена выше уровня |
OP_BALANCE | 6 | Пополнение или вывод со счёта |
OP_CREDIT | 7 | Использование кредита |
8 | Оплата брокером партнёрского вознаграждения рибейт-партнёрам, являющееся частью спреда с каждой сделки клиента |
просто помни какие значения у OP_BUY, OP_SELL и т.д.а путаницы не будет?
предшествовавшие условия должны выбрать и отфильтровать, ну а так даТолько нужно учесть размер массива, т.к. он может быть больше 6-ти:
проверил, плюсуетдля массивов это не прокатывало.
Спасибо об этом не подозревалТолько нужно учесть размер массива, т.к. он может быть больше 6-ти:
Но последние 3 значения не должны попадаться в списке текущих ордеров.
КОНСТАНТА ЗНАЧЕНИЕ ОПИСАНИЕ OP_BUY 0 Ордер на покупку OP_SELL 1 Ордер на продажу OP_BUYLIMIT 2 Отложенный ордер на покупку по достижении заданного уровня, текущая цена выше уровня OP_BUYSTOP 3 Отложенный ордер на покупку по достижении заданного уровня, текущая цена ниже уровня OP_SELLLIMIT 4 Отложенный ордер на продажу по достижении заданного уровня, текущая цена ниже уровня OP_SELLSTOP 5 Отложенный ордер на продажу по достижении заданного уровня, текущая цена выше уровня OP_BALANCE 6 Пополнение или вывод со счёта OP_CREDIT 7 Использование кредита 8 Оплата брокером партнёрского вознаграждения рибейт-партнёрам, являющееся частью спреда с каждой сделки клиента
Прокатывало с незапамятных времён. Как минимум 13 лет…Давно не пробовал, но раньше так наращивать можно было только переменные, а для массивов это не прокатывало.
То же попробовал, работает. А я столько лет инкременты и декременты для массивов пишу по деревенски gh2[type]=gh2[type]+1;. Это столько букаф лишних наклацал.Прокатывало с незапамятных времён. Как минимум 13 лет…