double up=iFractals(NULL, 0, MODE_UPPER, 3);
double down=iFractals(NULL, 0, MODE_LOWER, 3);
if(up > 0)//если появился фрактал вверх, продаем
{
//если есть открытые позиции вверх, закрыть
CloseOrders(OP_BUY);
OpenOrder(OP_SELL);
up = 0.0;
}
else
{
if(down > 0)//если появился фрактал вниз, покупаем
{
//если есть открытые позиции вниз, закрыть
CloseOrders(OP_SELL);
OpenOrder(OP_BUY);
down = 0.0;
}
А вот теперь, мне болбесу обьесните, как сделать чтобы при появлении допустим фрактала верх up > 0 нам начать прдовать но продовать будем только после того как появится 2 свечка, тоесть допустим появился фрактал верх на 0 баре потом 1 баре врактал исчез так как цена пошла в верх.
на нулевом баре фрактал не появится(если только в тестере), а так если по Вашей теории, то вроде все правильно, но лучше компилятором проверить, а еще нужно сделать контроль открытия баров
Да я согласен что на 0 баре фрактал не появляется извинете ошибся точнее будет выглядеть так 2 бар появился фрактал 1 бар врактал не исчез 0 бар открываем позици.
Точто я условия написал правильно я знаю я вот теперь не могу понять как сделаь что бы он открывал позии по заданным условиям поэтому и прошу помощи.
#property copyright "" #property link "" //---- input parameters extern double Lots=0.1; int MAGIC=20022010; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } void CheckForOpen() { //----------------открыть BUY------------------------------- if ()//условие открытия БАЙ { OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),5,0,0,"",MAGIC,0,Blue); } //---------------- открыть SELL----------------------------- if () условия открытия СЕЛЛ { OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),5,0,0,"",MAGIC,0,Red); } } void CheckForClose() { for (int i=0;i<OrdersTotal();i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol()) { if (OrderType()==OP_BUY) { //тут закрытие ордера на БАЙ } if (OrderType()==OP_SELL) { //тут закрытие на СЕЛЛ } } } } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if (Volume[0]>1) return; if (OrdersTotal()<1) CheckForOpen(); else CheckForClose(); //---- return(0); } //+------------------------------------------------------------------+впринципе вот стандартный шаблон для простого советника
sanyooooook, в OrderSend нельзя первым входящим параметром писать NULL, советник не откроет ни одной позиции, либо строго символ, либо Symbol()
да да это касяк, я просто шаблош скинул который у меня был, я постоянно его исправляю, пересохранить все никак руки не доходят)))
Парни помогите составить способ закрытия позиции вот по токому методу:
нужно найти открытую позицию, выбрать её сравнить с текущей ценой, если разность цены открытия позиции и текущей цены больше 4 пт то закрыть позицию
Вот я понял что с помощью каких вункций мне народ подсказал, но вот что то уже по всякому перепробывал не получается (((
Bid-OrderOpenPrice()<TP
OrderOpenPrice()-Ask<TP
обьесните куда их все таки правильно надо вставлять )))
for (int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS);
if (OrderType()==OP_BUY)
{
if (Bid-OrderOpenPrice()>=0.0004) OrderClose(OrderTicket(),OrderLots(),Bid,5,CLR_NONE);continue;}
if (OrderType()==OP_SELL)
{
if (OrderOpenPrice()-Ask>=0.0004) OrderClose(OrderTicket(),OrderLots(),Ask,5,CLR_NONE);}
}
Блин парни не получается что то ((( идея проста как 2 капли воды помогите пожалуста появился фрактал продаем и нужно что бы сделка закрылсь не по тейк профиту а по заданному достижению значения.
Я вот что попытался но еще не совсем во всем разобрался (((
Вот что у меня получилось
#property copyright "" #property link "" //---- input parameters extern double Lots=0.1; int MAGIC=20022010; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } void CheckForOpen() { //----------------открыть BUY------------------------------- if (iFractals(NULL, 0, MODE_UPPER, 3)>0)//условие открытия БАЙ { OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),5,0,0,"",MAGIC,0,Blue); } //---------------- открыть SELL----------------------------- if ((iFractals(NULL, 0, MODE_LOWER, 3)>0))// условия открытия СЕЛЛ { OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),5,0,0,"",MAGIC,0,Red); } } void CheckForClose() { for (int i=0;i<OrdersTotal();i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol()) { for (int i=0; i<OrdersTotal(); i++) { OrderSelect(i,SELECT_BY_POS); if (OrderType()==OP_BUY) { if (Bid-OrderOpenPrice()>=0.0004) OrderClose(OrderTicket(),OrderLots(),Bid,5,CLR_NONE);} if (OrderType()==OP_SELL) { if (OrderOpenPrice()-Ask>=0.0004) OrderClose(OrderTicket(),OrderLots(),Ask,5,CLR_NONE);} } } } } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if (Volume[0]>1) return; if (OrdersTotal()<1) CheckForOpen(); else CheckForClose(); //---- return(0); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу сильно не пинать меня, я только начал изучать MQL, разобрался с условиями, но вот как их выполнить что то до меня не доходит.
Вот смотрите знаю что скажите стратегия не работоспособна но мне важен сам факт написания.
Стратегия по фракталам вот допустим появился у нас фрактал в верх up > 0 продаем появился фрактал в низ down > 0 покупаем
Вот условия:
double up=iFractals(NULL, 0, MODE_UPPER, 3);
double down=iFractals(NULL, 0, MODE_LOWER, 3);
if(up > 0)//если появился фрактал вверх, продаем
{
//если есть открытые позиции вверх, закрыть
CloseOrders(OP_BUY);
OpenOrder(OP_SELL);
up = 0.0;
}
else
{
if(down > 0)//если появился фрактал вниз, покупаем
{
//если есть открытые позиции вниз, закрыть
CloseOrders(OP_SELL);
OpenOrder(OP_BUY);
down = 0.0;
А вот теперь, мне болбесу обьесните, как сделать чтобы при появлении допустим фрактала верх up > 0 нам начать прдовать но продовать будем только после того как появится 2 свечка, тоесть допустим появился фрактал верх на 0 баре потом 1 баре врактал исчез так как цена пошла в верх.
И еще, допустим появился фрактал, ждем когда появится новая свеча если свеча дальше идет в низ открываем сделку, А для того что бы закрыть сделку мне не нужен тейк профит нужно что бы советник сам закрыл позицию допустим по достижению 5 пипсов.
Помогите если не трудно.