Как кодировать? - страница 34

 

Нужна помощь в редактировании части EuroX2_sl EA .......

Привет всем программистам,

Я новичок в торговле на форекс и новичок на этом форуме тоже. Первый раз, я изучаю 10 пунктов 3, затем, EuroX2_sl, расширенный из 10 пунктов 3 EA скрипт. После того, как я сделал несколько форвард-тестов, для меня этот советник вполне подходит для новичков, как я, чтобы учиться. При форвард-тесте он хорошо открывал позицию, но не закрывал ее, как мне нужно (даже если я уже выполнил условие), когда рынок разворачивался или когда тренд менялся. Возможно, что-то не так с кодом (потому что я не программист), и я думаю, что мне нужна помощь любого из вас, чтобы решить эту проблему. Не могли бы вы проверить, какая часть кода может быть неправильной?

Я думаю, что позиция OPEN в порядке, так как она приносит прибыль, но проблема в позиции CLOSE, так как она не закрывается (BUY или SELL), даже когда индикатор существует, и это делает плавающие потери довольно большими.

Любой, кто знает об этом, пожалуйста, помогите мне отредактировать этот код........

Код, как я сделал это :

-------- часть скрипта из EuroX2_sl расширена с 10 пунктов до 3, как я думаю, для закрытия позиции -------

//+--------------------------------------------------------

// важно правильно войти в рынок,

// но еще важнее правильно выйти из него...

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // проверяем наличие открытой позиции

OrderType()<=OP_BUY &&

OrderType()>=OP_SELL &&

OrderType()>=OP_BUY &&

OrderSymbol()==Symbol()) // проверка наличия символа

{

//+--------------------------------------------------------------

if(OrderType()==OP_BUY) // открыта длинная позиция

{

//+-------------------------------------------------------------------

//+ УСЛОВИЕ ДЛЯ ЗАКРЫТИЯ ПОЗИЦИИ

//+-------------------------------------------------------------------

//+--------------- ЗАКРЫТЬ ПОЗИЦИЮ НА ПОКУПКУ ----------------------------

if ( Stoch_Main_M15_Cu < Stoch_Sig_M15_Cu )

//+ основной стохастик < стохастический сигнал

//+------------------------------------------------------------------

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // закрываем позицию

return(0); // выход

}

//+-----------------------------------------------------------------------

// проверка наличия трейлинг-стопа

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

//+---------------CLOSE SELL POSITION --------------------------------

else // переходим в короткую позицию

{ //+ НЕ УДАЛЯТЬ

if(OrderType()==OP_SELL) // открыта короткая позиция

{

}

// следует ли ее закрыть?

//+----------------------------------------------------------------------------

if ( Stoch_Main_M15_Cu > Stoch_Sig_M15_Cu )

//+ стохастический основной > стохастический сигнал

//+-----------------------------------------------------------------------------

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // закрываем позицию

return(0); // выход

}

//+----------------------------------------

// проверка наличия трейлинг-стопа

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

--------------------------------------------------------------

Спасибо,

fxgroup

 

Какие лучшие недельные/дневные срочные индикаторы

Этот вопрос может быть адресован опытным трейдерам.

Какие надежные (уже проверенные) индикаторы могут дать нам представление об основном движении тренда во время:

1- будущей недели

2- Будущий день (или следующий день)

Зная, что я не спрашиваю об уровнях входа B/S.

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

Спасибо

 

вопрос по mql

Код:

// если у нас есть открытые позиции, мы заботимся о них.

// с модификацией стоплосса

cnt=OrdersTotal();

while(cnt>=0)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) // && Reversed==False)

{

Print("Ticket ",OrderTicket()," modified.");// почему здесь написано перед модификацией ордеров (как я понимаю)?

if (OrderType()==OP_SELL)

{

если (TrailingStop>0)

{

if ((OrderOpenPrice()-Ask)>=(TrailingStop*Point+Pips*Point))

{

if (OrderStopLoss()>(Ask+Point*TrailingStop) || OrderStopLoss()==0)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,0,Purple);

return(0);

Здравствуйте всем, кто-нибудь может мне объяснить, почему :Print("Ticket ",OrderTicket()," modified."); пишется перед модификацией ордера. Как я понимаю, он выведет"билет заказа изменен", даже если он не был изменен. Это кусок кода терминатора.

Спасибо.

 
Flytox:
Код:

// если у нас есть открытые позиции, то мы заботимся о них

// с модификацией стоплосса

cnt=OrdersTotal();

while(cnt>=0)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) // && Reversed==False)

{

Print("Ticket ",OrderTicket()," modified.");// почему здесь написано перед модификацией ордеров (как я понимаю)?

if (OrderType()==OP_SELL)

{

если (TrailingStop>0)

{

if ((OrderOpenPrice()-Ask)>=(TrailingStop*Point+Pips*Point))

{

if (OrderStopLoss()>(Ask+Point*TrailingStop) || OrderStopLoss()==0)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,0,Purple);

return(0);

Здравствуйте всем, кто-нибудь может мне объяснить, почему :Print("Ticket ",OrderTicket()," modified."); пишется перед модификацией ордера. Как я понимаю, он выведет "билет заказа изменен", даже если он не был изменен. Это кусок кода-терминатора.

Спасибо.

Вы правы, нужно писать после модификации или сообщение должно быть : "Пытаюсь модифицировать заказ: ",OrderTicket()

 

спасибо Калензо, я изучаю mql и ваши статьи и ответы очень полезны, спасибо еще раз.

 

Возможно, будет достаточно, если вы выполните следующие четыре правки:

1. Закомментировать строку 102, чтобы было

//IsTrade = True;[/PHP]

2. Change blank line 104 to be

if ( Bid > OrderOpenPrice() - GAP * Point ) IsTrade = true;

3. Change blank line 120 to be

[PHP]if ( Ask < OrderOPenPrice() + GAP * Point ) IsTrade = true;

4. Добавить переменную "GAP" (extern int), которая представляет собой заданное количество пунктов, на которых следует "хеджировать".

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

 
ralph.ronnquist:
Возможно, будет достаточно, если вы выполните следующие четыре правки:

1. Закомментировать строку 102, чтобы было

//IsTrade = True;[/PHP]

2. Change blank line 104 to be

if ( Bid > OrderOpenPrice() - GAP * Point ) IsTrade = true;

3. Change blank line 120 to be

[PHP]if ( Ask < OrderOPenPrice() + GAP * Point ) IsTrade = true;

4. Добавьте переменную "GAP" (extern int), которая представляет собой заданное количество пунктов, на которые должен прийти "хедж".

Хотя, кто-то уже указывал на этом форуме, что вы не можете действительно "хеджировать" в том же символе; это практически то же самое, что принять убыток. Возможно, лучше взять убыток, а затем вернуться, когда цена снова развернется.....

Не помогло. И, чтобы быть более конкретным, я хочу, чтобы мой советник делал следующее:

Советник будет заключать сделки на покупку/продажу, основываясь на определенных условиях. После того, как начальная сделка заключена, иногда может пройти от трех до пяти дней, прежде чем она окончательно закроется по тейк-профиту. Между тем, в течение этого трех-пятидневного периода может возникнуть несколько торговых возможностей в противоположном направлении. Я хочу, чтобы советник воспользовался этими возможностями, оставив первоначальную сделку открытой, поскольку в конечном итоге она закроется с прибылью. Эти дополнительные торговые возможности в направлении, противоположном первоначальной сделке, технически будут хеджировать первоначальную сделку, хотя в конечном итоге они также закроются по тейк-профиту. Для ясности, я все же хочу, чтобы советник имел только одну открытую сделку в том же направлении. Таким образом, максимум сделок, открытых в одно и то же время, - это одна покупка и одна продажа.

Надеюсь, это поможет!

Спасибо за ваш ответ

 

Хм; я не тестировал ваш советник, но, читая логику, мне кажется, что единственное, что останавливает последующую продажу после покупки, это то, что "IsTrade" истинно. (За исключением того, что он не откроет продажу в то же самое время, когда он открывает покупку).

Поэтому, если вы хотите, чтобы логика продажи применялась безоговорочно, я бы подумал, что только моя правка (1) - забудьте о 2-4 - будет работать. Или удалите логику "IsTrade".

Правда, есть подчиненная логика с "TickCheck" и "BarCount", которая останавливает другую сделку на том же тике или на том же баре, но я предполагаю, что вы хотите, чтобы она все еще применялась.

Конечно, я не могу много сказать о сигнальной части, которую вы опустили. Например, если поднятие сигнала "Sell_Signal" учитывает "BuyOrders", то это еще не все.

 

Сделайте кодирование интересным

Прежде чем нажать BACK, помогите мне, пожалуйста.

Я новичок в кодировании индикаторов, но я знаю, как кодировать советников. Не на 100%, но достаточно хорошо.

В любом случае, мне интересно, поможет ли мне кто-нибудь добрый.

Объясните мне, пожалуйста, каждую строчку и приведите пример.

p.s. Это часть кода для MACD:

int start()

{

int limit;//what does Limit equal,0?

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- macd counted in the 1-st buffer

for(int i=0; i<limit; i++)//i<0?

MacdBuffer=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

//---- signal line counted in the 2-nd buffer

for(i=0; i<limit; i++)

SignalBuffer=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);

//---- done

return(0);

}

//+------------------------------------------------------------------+

Я буду очень рад, если кто-то или несколько человек помогут мне, дадут подсказки по кодированию индикаторов, или что-то в этом роде.

Спасибо,

Дэн.

 

Как запустить скрипт внутри советника?

Здравствуйте,

Я хотел бы узнать, как запустить скрипт в директории скриптов внутри советника.

If (condition true)

{

Запустить скрипт;

}

Заранее спасибо

С уважением,

Джимми