double Mas [Price]; //array per organizzare tutti gli ordini per prezzo?
1. OrdersTotal restituisce il totale degli ordini, ma sono numerati a partire da zero. Ecco perché il ciclo deve essere i < OrdersTotal()
2. L'array deve essere dichiarato doppio Mas[];. Se l'ordine viene selezionato con successo, la dimensione dell'array deve essere aumentata, perché non sappiamo quanti ordini ci sono in totale.
3. L'indice della stringa dell'array deve essere tra parentesi quadre. Mas[i] = Prezzo;
1. OrdersTotal restituisce il numero totale di ordini, ma sono numerati a partire da zero. Ecco perché il ciclo dovrebbe essere i < OrdersTotal()
2. L'array deve essere dichiarato doppio Mas[];. Se un ordine viene scelto con successo, la dimensione dell'array deve essere aumentata, perché non sappiamo quanti ce ne sono...
3. L'indice della stringa dell'array deve essere tra parentesi quadre. Mas[i] = Prezzo;
1. OrdersTotal restituisce il numero totale di ordini, ma sono numerati a partire da zero. Pertanto, il ciclo deve essere i < OrdiniTotali()
2. L'array deve essere dichiarato doppio Mas[];. Se un ordine viene scelto con successo, la dimensione dell'array deve essere aumentata, perché non sappiamo quanti ce ne sono...
3. L'indice della stringa dell'array deve essere tra parentesi quadre. Mas[i] = Prezzo;
Di conseguenza, entrambi sono sbagliati.
Otterremo un array unidimensionale di prezzi d'ordine in questo caso?
Nel pomeriggio, c'è una linea per selezionare il profitto in valuta. Voglio 1) avere una scelta nelle impostazioni dell'EA di un profitto fisso (come è già) o una parte del deposito come percentuale. Per favore, consigliate come fare questo.
La stringa originale è questa:
Doppio profitto esterno =10;
2) fare in modo che l'autoconteggio del profitto sia attivato, disattivato dalla cifra selezionata del saldo del conto.
Linea di fondo:
Profitto: fix/autocount.
Fix - quantità.
Autorate - percentuale del saldo.
Attivare l'autorun - profitto %.
Disattivare il conteggio automatico - profitto/perdita in %.
Selezionare il valore a partire dal quale saranno conteggiati i profitti/perdite dell'autoconto
Ciao. Potete dirmi come sbarazzarmi della chiusura e dell'apertura di un ordine pendente su ogni barra? Ho bisogno che si apra e che aspetti che si apra l'ordine corrispondente.
//+------------------------------------------------------------------+//| e-News-Lucky$.mq4 |//| Lucky$ & KimIV |//| http://www.kimiv.ru |//| |//| 24.10.2005 |//| Выставление ордеров в определённое время на пробой диапазона. |//| Если ни один ордер не сработал, то модификация на каждом баре. |//+------------------------------------------------------------------+#property copyright"Lucky$ & KimIV"#property link"http://www.kimiv.ru"#define MAGIC 123//------- Внешние параметры советника --------------------------------externstring _Parameters_Trade = "----- Параметры торговли";
externdouble Lots = 0.01; // Размер торгуемого лотаexternint StopLoss = 0; // Размер фиксированного стопаexternint TakeProfit = 0; // Размер фиксированного тэйкаexternstring TimeSetOrders = "10:30"; // Время установки ордеровexternstring TimeDelOrders = "22:30"; // Время удаления ордеровexternstring TimeClosePos = "22:30"; // Время закрытия позицийexternint DistanceSet = 200; // Расстояние от рынкаexternbool UseTrailing = True; // Использовать тралexternbool ProfitTrailing = True; // Тралить только профитexternint TrailingStop = 25; // Фиксированный размер тралаexternint TrailingStep = 5; // Шаг тралаexternint Slippage = 3; // Проскальзывание ценыexternstring _Parameters_Expert = "----- Параметры советника";
externstring Name_Expert = "e-News-Lucky$";
externbool UseSound = True; // Использовать звуковой сигналexternstring NameFileSound = "expert.wav"; // Наименование звукового файлаexterncolor clOpenBuy = LightBlue; // Цвет открытия покупкиexterncolor clOpenSell = LightCoral; // Цвет открытия продажиexterncolor clModifyBuy = Aqua; // Цвет модификации покупкиexterncolor clModifySell = Tomato; // Цвет модификации продажиexterncolor clCloseBuy = Blue; // Цвет закрытия покупкиexterncolor clCloseSell = Red; // Цвет закрытия продажи//---- Глобальные переменные советника -------------------------------int prevBar;
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+void deinit() {
Comment("");
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+void start() {
if (TimeToStr(CurTime(), TIME_MINUTES)==TimeSetOrders) SetOrders();
if (prevBar!=Bars && ExistOrder(1) && ExistOrder(2)) ModifyOrders();
DeleteOppositeOrders();
TrailingPositions();
if (TimeToStr(CurTime(), TIME_DATE)==TimeDelOrders) DeleteAllOrders();
if (TimeToStr(CurTime(), TIME_MINUTES)==TimeClosePos) CloseAllPositions();
prevBar=Bars;
}
//+------------------------------------------------------------------+//| Установка ордеров |//+------------------------------------------------------------------+void SetOrders() {
double ldStop=0, ldTake=0;
int spr=MarketInfo(Symbol(), MODE_SPREAD);
double pAsk=Ask+(DistanceSet+spr)*Point;
double pBid=Bid-DistanceSet*Point;
if (!ExistOrder(1)) {
if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
}
if (!ExistOrder(2)) {
if (StopLoss!=0) ldStop=pBid+StopLoss*Point;
if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
}
}
//+------------------------------------------------------------------+//| Модификация ордеров |//+------------------------------------------------------------------+void ModifyOrders() {
bool ret;
double ldStop=0, ldTake=0;
int spr=MarketInfo(Symbol(), MODE_SPREAD);
double pAsk=Ask+(DistanceSet+spr)*Point;
double pBid=Bid-DistanceSet*Point;
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC+1) {
if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
ret=OrderModify(OrderTicket(), pAsk, ldStop, ldTake, 0, clModifyBuy);
}
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC+2) {
if (StopLoss!=0) ldStop=pBid+StopLoss*Point;
if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
ret=OrderModify(OrderTicket(), pBid, ldStop, ldTake, 0, clModifySell);
}
}
}
}
//+------------------------------------------------------------------+//| Возвращает флаг существования ордера или позиции по номеру |//+------------------------------------------------------------------+bool ExistOrder(int mn) {
bool Exist=False;
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC+mn) {
Exist=True; break;
}
}
}
return(Exist);
}
//+------------------------------------------------------------------+//| Возвращает флаг существования позиции по номеру |//+------------------------------------------------------------------+bool ExistPosition(int mn) {
bool Exist=False;
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC+mn) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
Exist=True; break;
}
}
}
}
return(Exist);
}
//+------------------------------------------------------------------+//| Установка ордера |//| Параметры: |//| op - операция |//| pp - цена |//| ldStop - уровень стоп |//| ldTake - уровень тейк |//| mn - добавить к MAGIC |//+------------------------------------------------------------------+void SetOrder(int op, double pp, double ldStop, double ldTake, int mn) {
bool ret;
color clOpen;
string lsComm=GetCommentForOrder();
if (op==OP_BUYSTOP) clOpen=clOpenBuy;
else clOpen=clOpenSell;
ret=OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC+mn,0,clOpen);
if (UseSound) PlaySound(NameFileSound);
}
//+------------------------------------------------------------------+//| Генерирует и возвращает строку коментария для ордера или позиции |//+------------------------------------------------------------------+string GetCommentForOrder() {
return(Name_Expert);
}
//+------------------------------------------------------------------+//| Удаление всех ордеров |//+------------------------------------------------------------------+void DeleteAllOrders() {
bool fd;
for (int i=OrdersTotal()-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderMagicNumber()>MAGIC && OrderMagicNumber()<=MAGIC+2) {
if (OrderSymbol()==Symbol()) {
if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) {
fd=OrderDelete(OrderTicket());
if (fd && UseSound) PlaySound(NameFileSound);
}
}
}
}
}
}
//+------------------------------------------------------------------+//| Закрытие всех позиций по рыночной цене |//+------------------------------------------------------------------+void CloseAllPositions() {
bool fc;
for (int i=OrdersTotal()-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderMagicNumber()>MAGIC && OrderMagicNumber()<=MAGIC+2) {
if (OrderSymbol()==Symbol()) {
fc=False;
if (OrderType()==OP_BUY) {
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
}
if (fc && UseSound) PlaySound(NameFileSound);
}
}
}
}
}
//+------------------------------------------------------------------+//| Удаление противоположных ордеров |//+------------------------------------------------------------------+void DeleteOppositeOrders() {
bool fd, fep1, fep2;
fep1=ExistPosition(1);
fep2=ExistPosition(2);
for (int i=OrdersTotal()-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol()) {
fd=False;
if (OrderType()==OP_BUYSTOP && OrderMagicNumber()==MAGIC+1) {
if (fep2) fd=OrderDelete(OrderTicket());
}
if (OrderType()==OP_SELLSTOP && OrderMagicNumber()==MAGIC+2) {
if (fep1) fd=OrderDelete(OrderTicket());
}
if (fd && UseSound) PlaySound(NameFileSound);
}
}
}
}
//+------------------------------------------------------------------+//| Сопровождение позиции простым тралом |//+------------------------------------------------------------------+void TrailingPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderMagicNumber()>MAGIC && OrderMagicNumber()<=MAGIC+2) {
if (OrderSymbol()==Symbol()) {
if (OrderType()==OP_BUY) {
if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy);
}
}
}
if (OrderType()==OP_SELL) {
if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*Point) {
if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) {
ModifyStopLoss(Ask+TrailingStop*Point, clModifySell);
}
}
}
}
}
}
}
}
//+------------------------------------------------------------------+//| Перенос уровня StopLoss |//| Параметры: |//| ldStopLoss - уровень StopLoss |//| clModify - цвет модификации |//+------------------------------------------------------------------+void ModifyStopLoss(double ldStop, color clModify) {
bool fm;
double ldOpen=OrderOpenPrice();
double ldTake=OrderTakeProfit();
fm=OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify);
if (fm && UseSound) PlaySound(NameFileSound);
}
//+------------------------------------------------------------------+
Salve. Qualcuno di voi usa gli indicatori di ClasterDelta nel suo lavoro? Ho una domanda sull'uso automatico dei dati dell'indicatore VolumeProfile. Il fatto è che questo indicatore non restituisce nulla, ma disegna solo un istogramma di linee di tendenza. Ma quando si mette il cursore su questa linea, appare il valore del volume scambiato in questo tick. Come ottenere queste informazioni dall'indicatore!
Come ho incontrato prima studiando le classi, ancora una volta ci sono sfumature che non sono descritte negli articoli o da qualche parte così nascoste che non è possibile trovare attraverso un motore di ricerca. Un'intera giornata passata invano a cercare spiegazioni. Per esempio cosa significa questo simbolo e come influisce se non. Come si vede qui sotto nell'esempio di stati, prima c'è e poi non c'è: &
// Для int. Проверка существования в массиве элемента с заданным значениемint Find(int& aArray[],int aValue)
{
for(int i=0; i<ArraySize(aArray); i++)
{
if(aArray[i]==aValue)
{
return(i); // Элемент существует, возвращаем индекс элемента
}
}
return(-1); // Нет такого элемента, возвращаем -1
}
Anche questo simbolo non è chiaro cosa significa: ~
È corretto?
for(int i=1; i<=OrdersTotal(); i++) // ciclo degli ordini
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // se
{
int OT=OrdiniTotali; //il numero di ordini aperti nel terminale
double Price=OrderOpenPrice(); // Prezzo dell'ordine selezionato
double Mas [Price][OT]; //array per mettere in ordine tutti gli ordini
o
for(int i=1; i<=OrdersTotal(); i++) //ordinare il ciclo
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // se c'è un
{
double Price=OrderOpenPrice(); // Prezzo dell'ordine selezionato
double Mas [Price]; //array per organizzare tutti gli ordini per prezzo?
È corretto?
for(int i=1; i<=OrdersTotal(); i++) // ciclo degli ordini
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // se
{
int OT=OrdiniTotali; //il numero di ordini aperti nel terminale
double Price=OrderOpenPrice(); // Prezzo dell'ordine selezionato
double Mas [Price][OT]; //array per mettere in ordine tutti gli ordini
o
for(int i=1; i<=OrdersTotal(); i++) //ordinare il ciclo
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // se c'è un
{
double Price=OrderOpenPrice(); // Prezzo dell'ordine selezionato
double Mas [Price]; //array per organizzare tutti gli ordini per prezzo?
1. OrdersTotal restituisce il totale degli ordini, ma sono numerati a partire da zero. Ecco perché il ciclo deve essere i < OrdersTotal()
2. L'array deve essere dichiarato doppio Mas[];. Se l'ordine viene selezionato con successo, la dimensione dell'array deve essere aumentata, perché non sappiamo quanti ordini ci sono in totale.
3. L'indice della stringa dell'array deve essere tra parentesi quadre. Mas[i] = Prezzo;
Di conseguenza, entrambi sono sbagliati.
1. OrdersTotal restituisce il numero totale di ordini, ma sono numerati a partire da zero. Ecco perché il ciclo dovrebbe essere i < OrdersTotal()
2. L'array deve essere dichiarato doppio Mas[];. Se un ordine viene scelto con successo, la dimensione dell'array deve essere aumentata, perché non sappiamo quanti ce ne sono...
3. L'indice della stringa dell'array deve essere tra parentesi quadre. Mas[i] = Prezzo;
Di conseguenza, entrambi sono sbagliati.
Grazie mille!
1. OrdersTotal restituisce il numero totale di ordini, ma sono numerati a partire da zero. Pertanto, il ciclo deve essere i < OrdiniTotali()
2. L'array deve essere dichiarato doppio Mas[];. Se un ordine viene scelto con successo, la dimensione dell'array deve essere aumentata, perché non sappiamo quanti ce ne sono...
3. L'indice della stringa dell'array deve essere tra parentesi quadre. Mas[i] = Prezzo;
Di conseguenza, entrambi sono sbagliati.
Otterremo un array unidimensionale di prezzi d'ordine in questo caso?
double Price=OrderOpenPrice(); // Prezzo dell'ordine selezionato
double Mas[i] = Price; //array per mettere in ordine tutti gli ordini
for(int i=1; i<OrdersTotal();) // ciclo degli ordini
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // se c'è un prossimo
i++;
}
E in questo caso, sarà un array unidimensionale di prezzi d'ordine?
double Price=OrderOpenPrice(); // Prezzo dell'ordine selezionato
double Mas[i] = Price; //array per mettere in ordine tutti gli ordini
for(int i=1; i<OrdersTotal();) // ciclo degli ordini
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // se c'è un prossimo
i++;
}
Selezionato ==true non può essere scritto.
No, è più o meno così.
L'evidenziato ==true non può essere scritto.
Grazie mille!
Ciao. Potete dirmi come sbarazzarmi della chiusura e dell'apertura di un ordine pendente su ogni barra? Ho bisogno che si apra e che aspetti che si apra l'ordine corrispondente.
Salve. Qualcuno di voi usa gli indicatori di ClasterDelta nel suo lavoro? Ho una domanda sull'uso automatico dei dati dell'indicatore VolumeProfile. Il fatto è che questo indicatore non restituisce nulla, ma disegna solo un istogramma di linee di tendenza. Ma quando si mette il cursore su questa linea, appare il valore del volume scambiato in questo tick. Come ottenere queste informazioni dall'indicatore!
Qualche pensiero?
Come ho incontrato prima studiando le classi, ancora una volta ci sono sfumature che non sono descritte negli articoli o da qualche parte così nascoste che non è possibile trovare attraverso un motore di ricerca. Un'intera giornata passata invano a cercare spiegazioni. Per esempio cosa significa questo simbolo e come influisce se non. Come si vede qui sotto nell'esempio di stati, prima c'è e poi non c'è: &
Anche questo simbolo non è chiaro cosa significa: ~
*