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

 
InTrance:
Не пробуйте, сделайте это

Я на работе... и порт metatrader здесь заблокирован.

 

Привет, я все еще новичок в программировании, и у меня проблемы с добавлением следующих функций к этому простому советнику:

1. Тейк-профит

2. Стоп-лосс

3. Трейлинг-стоп

4. Количество пунктов для активации трейлинг-стопа

//---- input parameters

extern double Lots=0.1;

extern int Slippage=5;

int MagicNum = 98760;

bool longPosOpened, shortPosOpened;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

double crossup = iCustom(NULL , 0, "18_28Cross", 1,18,1,28,1,0, 1);

double crossdown = iCustom(NULL , 0, "18_28Cross", 1,18,1,28,1,1,1);

if (crossup != EMPTY_VALUE)

{

if (!PosOpened(OP_BUY))

{

CloseAllOpenAndPendingTrades();

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,Symbol(),MagicNum,0);

}

}

else if(crossdown != EMPTY_VALUE)

{

if (!PosOpened(OP_SELL))

{

CloseAllOpenAndPendingTrades();

OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,Symbol(),MagicNum,0);

}

}

return(0);

}

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

bool PosOpened(int orderType)

{

int total=OrdersTotal();

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == Symbol() && OrderType() == orderType)

{

return(true);

}

}

return(false);

}

void CloseAllOpenAndPendingTrades()

{

int total = OrdersTotal();

for(int i=total-1;i>=0;i--)

{

OrderSelect(i, SELECT_BY_POS);

if(Symbol() != OrderSymbol()) continue; // important! only close positions of current currency pair

int type = OrderType();

bool result = false;

switch(type)

{

//Close opened long positions

case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 200);

break;

//Close opened short positions

case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 200);

break;

//Close pending orders

case OP_BUYLIMIT :

case OP_BUYSTOP :

case OP_SELLLIMIT :

case OP_SELLSTOP : result = OrderDelete( OrderTicket() );

}

}

return(0);

}

 

Как обнаружить скачок от параболического сар?

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

if(iSAR(NULL,0,0.02,0.2,0)-iSAR(NULL,0,0.02,0.2,1)>1.0){ // если есть скачок вверх.

Но это, похоже, не работает правильно.

Как я могу определить, находится ли psar выше или ниже моих баров?

TIA

 
:: используйте прокси в metatrader...

ИН10TION

ssvl:
я на работе... и порт metatrader заблокирован здесь .
 
:: сравните результат sar с текущим закрытием[0]
ssvl:
В настоящее время я использую этот код для обнаружения скачка:

if(iSAR(NULL,0,0.02,0.2,0)-iSAR(NULL,0,0.02,0.2,1)>1.0){ // если есть скачок вверх.

Но это, похоже, не работает правильно.

Как я могу определить, находится ли psar выше или ниже моих баров?

TIA
 

Привет IN10TION, знаете ли вы хороший способ проверить, закрылась ли сделка, чтобы советник не размещал новую сделку (повторный вход) до следующего сигнала? Мой советник проверяет состояние торговли до, скажем, 10 баров, но если условие продажи уже было выполнено в первые несколько баров и закрылось, я хочу, чтобы советник прекратил проверку до 10-барного смещения и ждал до следующего фактического сигнала?

Спасибо

 

Используйте функцию OrderHistory().

Люкс

 
luxinterior:
Используйте функцию OrderHistory(). Lux

Спасибо, но не уверен, как это работает. Я не хочу знать, был ли ордер только что закрыт, а хочу знать, был ли ордер открыт и закрыт в течение стольких-то баров. Затем только разместить еще одну сделку на следующем входе основного сигнала. Я все еще пытаюсь устранить быстрые повторные входы в сделку, когда ордер был только что открыт и закрыт, но торговые условия все еще выполняются. Я хочу, чтобы он каким-то образом делал только одну сделку на основной сигнал, так что даже если торговые условия все еще действительны, не торговал снова, если уже торговал по этому сигналу (включая смещение).

Попробую объяснить на примере. Это может быть то, с чем ничего нельзя поделать.

EG: Допустим, я использую QQE и VQI в качестве точки входа в сигнальную торговлю (QQE пересекается, а VQI меняется с покупки на продажу или наоборот).

Теперь я добавляю опцию SignalOffset, скажем, на 6 баров, потому что пересечение QQE и сигнал VQI могут не произойти точно на одном и том же баре.

Теперь допустим, что есть действительная сделка в пределах 2 баров друг от друга, когда QQE и VQI согласны, так что теперь сделка размещена, но у меня есть TP на 10 пунктов, и бар движется на 15 пунктов, мой TP пробит и сделка закрыта. Торговые условия все еще выполняются из-за моего 6-барного смещения, теперь размещается еще одна сделка (повторный вход), плохо если этот один или два бара двигаются на 100 пунктов, а мой TP равен 10, у меня только что было 10 сделок, плохо Я хочу только одну сделку на сигнал (со смещением).

Имеет ли это смысл? Я все еще хочу, чтобы он торговал в пределах 6 баров, хотя, если произойдет противоположный сигнал, а другая сделка была закрыта.

Спасибо

 
:: сделайте переменную [switch], если уже есть 1 ордер на продажу, он перестанет делать другие продажи (значение switch -1) и будет перенастраиваться только когда есть сигнал на покупку и ордер на покупку сделан (значение switch 1)... что-то дополнительное (избыточное) вы можете подумать о таймере сброса, в случае, если есть большой тренд вверх или вниз, вы можете иметь 2 или 3 продажи с определенным интервалом между теми же ордерами (тайминг).

ИН10TION

matrixebiz:
Спасибо, но не уверен, как это работает. Я не хочу знать, был ли ордер только что закрыт, а хочу знать, был ли ордер открыт и закрыт в течение стольких-то баров. Затем только разместить еще одну сделку на следующем входе основного сигнала. Я все еще пытаюсь устранить быстрые повторные входы в сделку, когда ордер был только что открыт и закрыт, но торговые условия все еще выполняются. Я хочу, чтобы он каким-то образом делал только одну сделку на основной сигнал, так что даже если торговые условия все еще действительны, не торговал снова, если уже торговал по этому сигналу (включая смещение).

Попробую объяснить на примере. Это может быть то, с чем ничего нельзя поделать.

EG: Допустим, я использую QQE и VQI в качестве сигнальной точки входа в торговлю (пересечение QQE и VQI меняется с покупки на продажу или наоборот).

Теперь я добавляю опцию SignalOffset, скажем, на 6 баров, потому что пересечение QQE и сигнал VQI могут не произойти точно на одном и том же баре.

Теперь допустим, что есть действительная сделка в пределах 2 баров друг от друга, когда QQE и VQI согласны, так что теперь сделка размещена, но у меня есть TP на 10 пунктов, и бар движется на 15 пунктов, мой TP пробит и сделка закрыта. Торговые условия все еще выполняются из-за моего 6-барного смещения, теперь размещается еще одна сделка (повторный вход), плохо если этот один или два бара двигаются на 100 пунктов, а мой TP равен 10, у меня только что было 10 сделок, плохо Я хочу только одну сделку на сигнал (со смещением).

Имеет ли это смысл? Я бы все еще хотел, чтобы он торговал в пределах 6 баров, хотя, если произойдет противоположный сигнал, а другая сделка была закрыта.

Спасибо
 

Обмен данными между двумя приложениями metatrader

Я пытаюсь записать данные в файл из одного метатрейдера, чтобы прочитать их из второго метатрейдера.

Проблема в том, что когда я пытаюсь записать данные в c:\, я получаю сообщение об ошибке "абсолютный путь к файлу "C:\EURUSD.txt" не разрешен".

Есть идеи или другие способы обмена данными между двумя приложениями метатрейдера?