النتائج 1 إلى 11 من 11
الموضوع: هل يوجد طريقة تحويل من Java الىmql4
- 19-11-2017, 11:04 AM #1
هل يوجد طريقة تحويل من Java الىmql4
سلام عليكم اخوا المبرمجين
هل يوجد طريقه لي تحويل كود من Java الى mql4 وشكرا جزيلا
- 19-11-2017, 11:16 AM #2
- 19-11-2017, 12:13 PM #3
مشكور اخ فيلسوف الباديه
هاد الكودكود PHP:package com.dukascopy.visualforex.visualjforex;
import java.util.*;
import com.dukascopy.api.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.concurrent.CopyOnWriteArrayList;
import java.lang.reflect.*;
import java.math.BigDecimal;
/*
* Created by VisualJForex Generator, version 2.40
* Date: 19.11.2017 09:12
*/
public class ArticleContestApril implements IStrategy {
private CopyOnWriteArrayList<TradeEventAction> tradeEventActions = new CopyOnWriteArrayList<TradeEventAction>();
private static final String DATE_FORMAT_NOW = "yyyyMMdd_HHmmss";
private IEngine engine;
private IConsole console;
private IHistory history;
private IContext context;
private IIndicators indicators;
private IUserInterface userInterface;
@Configurable("defaultTakeProfit:")
public int defaultTakeProfit;
@Configurable("defaultInstrument:")
public Instrument defaultInstrument = Instrument.EURUSD;
@Configurable("defaultSlippage:")
public int defaultSlippage = 5;
@Configurable("defaultTradeAmount:")
public double defaultTradeAmount;
@Configurable("defaultStopLoss:")
public int defaultStopLoss = 25;
@Configurable("defaultPeriod:")
public Period defaultPeriod = Period.TEN_MINS;
private Candle LastBidCandle = null ;
private String AccountId = "";
private double _ATR20DayPips;
private IOrder _currentPosition = null ;
private double Equity;
private int _traillingStep = 15;
private Tick LastTick = null ;
private int _traillingTrigger;
private String AccountCurrency = "";
private int OverWeekendEndLeverage;
private double Leverage;
private double _dynamicLots = 1.0E-6;
private List<IOrder> PendingPositions = null ;
private List<IOrder> OpenPositions = null ;
private double _atr20DayPips;
private double UseofLeverage;
private IMessage LastTradeEvent = null ;
private boolean GlobalAccount;
private int _stopLoss = 10;
private double _atr20Day;
private Candle LastAskCandle = null ;
private int MarginCutLevel;
private List<IOrder> AllPositions = null ;
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
this.history = context.getHistory();
this.context = context;
this.indicators = context.getIndicators();
this.userInterface = context.getUserInterface();
subscriptionInstrumentCheck(defaultInstrument);
ITick lastITick = context.getHistory().getLastTick(defaultInstrument);
LastTick = new Tick(lastITick, defaultInstrument);
IBar bidBar = context.getHistory().getBar(defaultInstrument, defaultPeriod, OfferSide.BID, 1);
IBar askBar = context.getHistory().getBar(defaultInstrument, defaultPeriod, OfferSide.ASK, 1);
LastAskCandle = new Candle(askBar, defaultPeriod, defaultInstrument, OfferSide.ASK);
LastBidCandle = new Candle(bidBar, defaultPeriod, defaultInstrument, OfferSide.BID);
if (indicators.getIndicator("ATR") == null) {
indicators.registerDownloadableIndicator("1305","ATR");
}
subscriptionInstrumentCheck(Instrument.fromString("EUR/USD"));
}
public void onAccount(IAccount account) throws JFException {
AccountCurrency = account.getCurrency().toString();
Leverage = account.getLeverage();
AccountId= account.getAccountId();
Equity = account.getEquity();
UseofLeverage = account.getUseOfLeverage();
OverWeekendEndLeverage = account.getOverWeekEndLeverage();
MarginCutLevel = account.getMarginCutLevel();
GlobalAccount = account.isGlobal();
}
private void updateVariables(Instrument instrument) {
try {
AllPositions = engine.getOrders();
List<IOrder> listMarket = new ArrayList<IOrder>();
for (IOrder order: AllPositions) {
if (order.getState().equals(IOrder.State.FILLED)){
listMarket.add(order);
}
}
List<IOrder> listPending = new ArrayList<IOrder>();
for (IOrder order: AllPositions) {
if (order.getState().equals(IOrder.State.OPENED)){
listPending.add(order);
}
}
OpenPositions = listMarket;
PendingPositions = listPending;
} catch(JFException e) {
e.printStackTrace();
}
}
public void onMessage(IMessage message) throws JFException {
if (message.getOrder() != null) {
updateVariables(message.getOrder().getInstrument());
LastTradeEvent = message;
for (TradeEventAction event : tradeEventActions) {
IOrder order = message.getOrder();
if (order != null && event != null && message.getType().equals(event.getMessageType())&& order.getLabel().equals(event.getPositionLabel())) {
Method method;
try {
method = this.getClass().getDeclaredMethod(event.getNextBlockId(), Integer.class);
method.invoke(this, new Integer[] {event.getFlowId()});
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
tradeEventActions.remove(event);
}
}
ATR_block_17(2);
}
}
public void onStop() throws JFException {
}
public void onTick(Instrument instrument, ITick tick) throws JFException {
LastTick = new Tick(tick, instrument);
updateVariables(instrument);
ATR_block_17(0);
}
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
LastAskCandle = new Candle(askBar, period, instrument, OfferSide.ASK);
LastBidCandle = new Candle(bidBar, period, instrument, OfferSide.BID);
updateVariables(instrument);
ATR_block_17(1);
}
public void subscriptionInstrumentCheck(Instrument instrument) {
try {
if (!context.getSubscribedInstruments().contains(instrument)) {
Set<Instrument> instruments = new HashSet<Instrument>();
instruments.add(instrument);
context.setSubscribedInstruments(instruments, true);
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public double round(double price, Instrument instrument) {
BigDecimal big = new BigDecimal("" + price);
big = big.setScale(instrument.getPipScale() + 1, BigDecimal.ROUND_HALF_UP);
return big.doubleValue();
}
public ITick getLastTick(Instrument instrument) {
try {
return (context.getHistory().getTick(instrument, 0));
} catch (JFException e) {
e.printStackTrace();
}
return null;
}
private void If_block_11(Integer flow) {
boolean argument_1 = _currentPosition.isLong();
boolean argument_2 = true;
if (argument_1!= argument_2) {
Calculation_block_12(flow);
}
else if (argument_1 == argument_2) {
Calculation_block_12(flow);
}
}
private void Calculation_block_12(Integer flow) {
double argument_1 = 0.25;
double argument_2 = _atr20DayPips;
_traillingTrigger = (int)(argument_1 * argument_2);
If_block_13(flow);
}
private void If_block_13(Integer flow) {
double argument_1 = _currentPosition.getProfitLossInPips();
int argument_2 = _traillingTrigger;
if (argument_1< argument_2) {
}
else if (argument_1> argument_2) {
CustomTrailingStop_block_14(flow);
}
else if (argument_1== argument_2) {
}
}
private void CustomTrailingStop_block_14(Integer flow) {
IOrder argument_1 = _currentPosition;
int argument_2 = _traillingStep;
int argument_3 = _stopLoss;
int TRAILINGCOEFFICIENT = 3;
Instrument selectedInstrument = argument_1.getInstrument();
int minStopPricePips;
minStopPricePips = (argument_2 > TRAILINGCOEFFICIENT) ? argument_2 : TRAILINGCOEFFICIENT;
try {
double bid = getLastTick(selectedInstrument).getBid();
double ask = getLastTick(selectedInstrument).getAsk();
double trailingStopPrice = minStopPricePips * selectedInstrument.getPipValue();
double stopLossPips = argument_3 * selectedInstrument.getPipValue();
if ((context.getEngine() != null) && (argument_1.getState().equals(IOrder.State.OPENED) || argument_1.getState().equals(IOrder.State.FILLED))) {
if (argument_1.isLong()) {
if (argument_1.getStopLossPrice() > 0) {
if (bid >= (argument_1.getStopLossPrice() + (stopLossPips + trailingStopPrice)) && (bid - stopLossPips)!=argument_1.getStopLossPrice()) {
argument_1.setStopLossPrice(bid - stopLossPips);
}
} else if (argument_1.getStopLossPrice() == 0) {
if (bid >= (argument_1.getOpenPrice() + trailingStopPrice) && (bid - stopLossPips)!=argument_1.getStopLossPrice()) {
argument_1.setStopLossPrice(bid - stopLossPips);
}
}
} else {
if (argument_1.getStopLossPrice() > 0) {
if (ask <= (argument_1.getStopLossPrice() - (stopLossPips + trailingStopPrice))&& (ask + stopLossPips)!=argument_1.getStopLossPrice()) {
argument_1.setStopLossPrice(ask + stopLossPips);
}
} else if (argument_1.getStopLossPrice() == 0) {
if (ask <= (argument_1.getOpenPrice() - trailingStopPrice)&& (ask + stopLossPips)!=argument_1.getStopLossPrice()) {
argument_1.setStopLossPrice(ask + stopLossPips);
}
}
}
}
TradeEventAction event = new TradeEventAction();
event.setMessageType(IMessage.Type.ORDER_CHANGED_OK);
event.setNextBlockId("If_block_15");
event.setPositionLabel(argument_1.getLabel());
event.setFlowId(flow);
tradeEventActions.add(event);
} catch (JFException e) {
e.printStackTrace();
}
If_block_15(flow);
}
private void If_block_15(Integer flow) {
int argument_1 = PendingPositions.size();
double argument_2 = 1.0;
if (argument_1< argument_2) {
}
else if (argument_1> argument_2) {
CloseandCancelPosition_block_16(flow);
}
else if (argument_1== argument_2) {
CloseandCancelPosition_block_16(flow);
}
}
private void CloseandCancelPosition_block_16(Integer flow) {
try {
if (_currentPosition != null && (_currentPosition.getState() == IOrder.State.OPENED||_currentPosition.getState() == IOrder.State.FILLED)){
_currentPosition.close();
}
} catch (JFException e) {
e.printStackTrace();
}
}
private void ATR_block_17(Integer flow) {
Instrument argument_1 = defaultInstrument;
Period argument_2 = Period.DAILY;
int argument_3 = 1;
int argument_4 = 20;
OfferSide[] offerside = new OfferSide[1];
IIndicators.AppliedPrice[] appliedPrice = new IIndicators.AppliedPrice[1];
offerside[0] = OfferSide.BID;
appliedPrice[0] = IIndicators.AppliedPrice.CLOSE;
Object[] params = new Object[1];
params[0] = 20;
try {
subscriptionInstrumentCheck(argument_1);
long time = context.getHistory().getBar(argument_1, argument_2, OfferSide.BID, argument_3).getTime();
Object[] indicatorResult = context.getIndicators().calculateIndicator(argument_1, argument_2, offerside,
"ATR", appliedPrice, params, Filter.WEEKENDS, 1, time, 0);
if ((new Double(((double [])indicatorResult[0])[0])) == null) {
this._atr20Day = Double.NaN;
} else {
this._atr20Day = (((double [])indicatorResult[0])[0]);
}
CalculationExpression_block_18(flow);
} catch (JFException e) {
e.printStackTrace();
console.getErr().println(e);
this._atr20Day = Double.NaN;
}
}
private void CalculationExpression_block_18(Integer flow) {
_atr20DayPips = (_atr20Day*10000)*2;
If_block_22(flow);
}
private void Calculation_block_19(Integer flow) {
double argument_1 = Equity;
double argument_2 = _dynamicLots;
defaultTradeAmount = argument_1 * argument_2;
}
private void PositionsViewer_block_20(Integer flow) {
List<IOrder> argument_1 = AllPositions;
for (IOrder order : argument_1){
if (order.getState() == IOrder.State.OPENED||order.getState() == IOrder.State.FILLED){
_currentPosition = order;
If_block_21(flow);
}
}
}
private void If_block_21(Integer flow) {
int argument_1 = OpenPositions.size();
double argument_2 = 1.0;
if (argument_1< argument_2) {
}
else if (argument_1> argument_2) {
}
else if (argument_1== argument_2) {
If_block_11(flow);
}
}
private void If_block_22(Integer flow) {
int argument_1 = AllPositions.size();
double argument_2 = 1.0;
if (argument_1< argument_2) {
Calculation_block_19(flow);
}
else if (argument_1> argument_2) {
PositionsViewer_block_20(flow);
}
else if (argument_1== argument_2) {
PositionsViewer_block_20(flow);
}
}
class Candle {
IBar bar;
Period period;
Instrument instrument;
OfferSide offerSide;
public Candle(IBar bar, Period period, Instrument instrument, OfferSide offerSide) {
this.bar = bar;
this.period = period;
this.instrument = instrument;
this.offerSide = offerSide;
}
public Period getPeriod() {
return period;
}
public void setPeriod(Period period) {
this.period = period;
}
public Instrument getInstrument() {
return instrument;
}
public void setInstrument(Instrument instrument) {
this.instrument = instrument;
}
public OfferSide getOfferSide() {
return offerSide;
}
public void setOfferSide(OfferSide offerSide) {
this.offerSide = offerSide;
}
public IBar getBar() {
return bar;
}
public void setBar(IBar bar) {
this.bar = bar;
}
public long getTime() {
return bar.getTime();
}
public double getOpen() {
return bar.getOpen();
}
public double getClose() {
return bar.getClose();
}
public double getLow() {
return bar.getLow();
}
public double getHigh() {
return bar.getHigh();
}
public double getVolume() {
return bar.getVolume();
}
}
class Tick {
private ITick tick;
private Instrument instrument;
public Tick(ITick tick, Instrument instrument){
this.instrument = instrument;
this.tick = tick;
}
public Instrument getInstrument(){
return instrument;
}
public double getAsk(){
return tick.getAsk();
}
public double getBid(){
return tick.getBid();
}
public double getAskVolume(){
return tick.getAskVolume();
}
public double getBidVolume(){
return tick.getBidVolume();
}
public long getTime(){
return tick.getTime();
}
public ITick getTick(){
return tick;
}
}
protected String getLabel() {
String label;
label = "IVF" + getCurrentTime(LastTick.getTime()) + generateRandom(10000) + generateRandom(10000);
return label;
}
private String getCurrentTime(long time) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(time);
}
private static String generateRandom(int n) {
int randomNumber = (int) (Math.random() * n);
String answer = "" + randomNumber;
if (answer.length() > 3) {
answer = answer.substring(0, 4);
}
return answer;
}
class TradeEventAction {
private IMessage.Type messageType;
private String nextBlockId = "";
private String positionLabel = "";
private int flowId = 0;
public IMessage.Type getMessageType() {
return messageType;
}
public void setMessageType(IMessage.Type messageType) {
this.messageType = messageType;
}
public String getNextBlockId() {
return nextBlockId;
}
public void setNextBlockId(String nextBlockId) {
this.nextBlockId = nextBlockId;
}
public String getPositionLabel() {
return positionLabel;
}
public void setPositionLabel(String positionLabel) {
this.positionLabel = positionLabel;
}
public int getFlowId() {
return flowId;
}
public void setFlowId(int flowId) {
this.flowId = flowId;
}
}
}
- 19-11-2017, 03:56 PM #4
محتاجة صفاء ذهن اخي
وفهم هدف الكود كاملا
منصة دوكاسكوبي JFOREX ؟؟
- 19-11-2017, 03:57 PM #5
اسرع حل بالنسبة لك هو ان تكون من خبرتك فاهم هدف البرنامج اعلاه وبالتالي اعادة برمجة لما تفهمه
ولكن اي مبرمج هنا اذا هذه الامور ليست واضحة لك لابد يعود للمرجع:
https://www.dukascopy.com/client/jav.../IHistory.html
بحيث يفهم وظائفها كما هي ثم يترجمها الى اي لغة اخرىآخر تعديل بواسطة فيلسوف البادية ، 19-11-2017 الساعة 04:00 PM
- 19-11-2017, 05:48 PM #6
وصلت لي استراتيجية هاد الرابط تبعها
https://www.dukascopy.com/fxcomm/fx-...85&language=ar
الاستراتيجيه دنميكيه فكرة تحديد lot عن طريق معدل حركة اليوم ATR فكره جديده ولا مره صادفتها وتحديد الهدف عن طريق نسبه مئويه من معدل الحركه اليوميه وفيها كتير شغلة جديده
- 20-11-2017, 08:09 PM #7
روعة JFOREX --- عندهم دالة كافة السيولة الموجودة سواء للعرض او للطلب + ايضا خاصية سيولة كل مستوى سعري عرض وطلب
===
ردك الاخير اخي اذا تبي جواب دقيق وعاجل لايكفي--لابد تفصلها اذا كنت فاهمها---لانك حكمت انها ممتازة--وبالتالي اكيد فاهمها 100%
- 20-11-2017, 08:16 PM #8
يعتمدون القوالب الجاهزة تحت ال Data Structure
مثلا نحت تعونا على انواع بيانات صحيح وعشري ولون الخ
عندهم مكبوسة مع بعض لكل معطى وبالتالي من خلال المراجع تفك شفرتها
سأستعرض ابرز الانواع المستخدمة بداء من السوبر super-interfaces وحتى الفروع Subinterfaces:
اولا اي مبتدئ لهذه اللغة لابد يفهم دوال البارات السعرية: الاسك والبد الخ---وكيف يحصل عليها وهي تحت ITimedData --- التي تشبه timeseris data في الميتا
تعتبر: Superinterfaces -- يعني منها تنبثق اشياء كثيرة وهي لاتنبثق من اي شيء--هي حجر اساس
بناتها Subinterfaces هي:
IBar, ILineBreak, IPointAndFigure, IPriceAggregationBar, IRangeBar, IRenkoBar, ITick, ITickBar
- 20-11-2017, 08:19 PM #9
Ibar في الاعلى متغير مكبوس,
يعني متغير يجمع تحته عدة متغيرات اساسيىة---متغيرات اساسية يعين عشري مثل السعر نصي مثل اسم الزوج عدد صحيح مثل الفوليوم----كابسينها مع بعض لكل بارة
فجعلوا النوع bar مسبوقة ب i ----نوع هم اخترعوه
- 20-11-2017, 08:24 PM #10
- 20-11-2017, 08:27 PM #11
لاحظ اخي هذه الاسطر من برنامجك
انواع مكبوسة
يعني مسألة ثقافة معرفتها
كود PHP:private IEngine engine;
private IConsole console;
private IHistory history;
private IContext context;
private IIndicators indicators;
private IUserInterface userInterface;
ماهي؟
ج: مسألة ثقافة--لابد نرجع للمانوال